我想匹配放在字符串末尾或中间的数字。
示例将是:
"chapter some word 12 or IV" or "chapter some word 12 or IV some word"
我要提取的数字是字符串中的“ 12”或IV。
我尝试用?:\w*
或?=\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'
请参见regex demo
**匹配任何1+数字或使用单词后的罗马数字,从1到10(I
到X
)
'~\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
-match reset operator\d+
-1个以上的数字VI{0,3}|I(?:[XV]|I{0,2})
-V
和0、1、2或3I
s(即罗马5、6、7、8)或I
,后跟X
或V
(即9和4)或0(因此,罗马1与之匹配),1或2个I
(罗马2和3)。