php - 正则表达式匹配一个或多个数字或从 I 到 X 的罗马数字在具有特定前缀的单词之后
问题描述
我想匹配放置在字符串末尾或中间的数字。
这个例子是:
"chapter some word 12 or IV" or "chapter some word 12 or IV some word"
我要提取的数字是字符串中的“ 12 ”或IV。
我试图用?:\w*
or环顾四周,?=\w*
但它不起作用。
我的正则表达式:
if (preg_match('/ch\w*\s*\K(?|(?=((?<=|\s)\d+(?:\.\d+)?))|(?=([ivx]+(?![a-z]))))/i', $string, $matches)){
print_r($matches);
}
我错过了正则表达式的东西吗?任何正确方向的指针将不胜感激。
解决方案
您可以使用
'~\bch\D*\K\d+~i'
查看正则表达式演示
**匹配任何 1+ 数字或罗马数字从 1 到 10 ( I
to X
)在单词 use 之后
'~\bch.*?\K\b(?:\d+|VI{0,3}|I(?:[XV]|I{0,2}))\b~i'
在这里,一组备选方案被添加到\d+
: VI{0,3}|I(?:[XV]|I{0,2})
。
细节
\b
- 起始字边界,无字母、数字或_
应立即出现在当前位置的左侧ch
- 文字子串\D*
- 0+ 非数字字符\K
-匹配重置运算符\d+
- 1+ 位数VI{0,3}|I(?:[XV]|I{0,2})
-V
和 0、1、2 或 3I
s(即罗马 5、6、7、8),或者I
后面跟着X
orV
(即 9 和 4)或 0(所以,罗马 1 匹配), 1 或 2I
秒(罗马书 2 和 3)。
推荐阅读
- symfony - Symfony 3.4 - ChoiceType 字段和相同的标签
- php - PHP 将多个数组合并为一个多维关联数组
- ubuntu - 命令在控制台中工作,但 Cronjob 不起作用
- reactjs - 为什么 og:image 不使用 React 渲染?
- amazon-web-services - 如何使用 CLI 命令创建 AWS 粘合作业?
- ansible - 在主机上运行时出现 Ansible playbook 错误:
- r - 无法使用 ggplot2 显示线和点
- html - 我们服务器正在运行 NGINX,但需要更多配置。我能做些什么?
- php - 为什么执行在 wordpress_remote_post() 函数调用处停止?
- python - 如何在python中保存大量文件