正则表达式匹配一个或多个数字或从 I 到 X 的罗马数字在具有特定前缀的单词之后
Regex matching one or more digits or a Roman number from I to X after word with certain prefix
我想匹配字符串末尾或中间的数字。
示例为:
"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'
**匹配任意1+位数字或罗马数字1到10(I
到X
)后使用[=32] =]
'~\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 或 3 I
s(即罗马数字 5、6、7、8)或 I
后跟 X
或 V
(即 9 和 4)或 0(因此匹配罗马 1)、1 或 2 I
s(罗马 2 和 3) .
我想匹配字符串末尾或中间的数字。
示例为:
"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'
**匹配任意1+位数字或罗马数字1到10(I
到X
)后使用[=32] =]
'~\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 或 2I
s(罗马 2 和 3) .