正则表达式匹配一个或多个数字或从 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'

regex demo

**匹配任意1+位数字或罗马数字1到10(IX后使用[=32] =]

'~\bch.*?\K\b(?:\d+|VI{0,3}|I(?:[XV]|I{0,2}))\b~i'

this regex demo

此处,\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 Is(即罗马数字 5、6、7、8)或 I后跟 XV(即 9 和 4)或 0(因此匹配罗马 1)、1 或 2 Is(罗马 2 和 3) .