正则表达式捕获组返回错误的结果,略微不同的文本

时间:2017-08-30 00:01:32

标签: regex pcre regex-group

我正在尝试编写一个带有捕获组的PCRE,该捕获组在两个字符串中查找数值。

案例A:

  

总共有1个线程由此Valve监控并可能卡住。

案例B:

  

此阀门监控的是10个线程,可能会卡住。

我写了一个正则表达式,当在案例A上运行时返回“1”,但对于案例B,它返回错误的结果“仍然”。如何编写一个为A返回“1”而为B返回“10”?

这就是我所拥有的:

There\s+is.are\s+(?<threadNumber>[^\s]+)]

2 个答案:

答案 0 :(得分:0)

您可以在数字部分前添加可选的(?:\S+\s+)?以匹配可选的“字词”,并仅使用\d+来匹配数字:

There\s+is.are\s+(?:\S+\s+)?(?<threadNumber>\d+)
                 ^^^^^^^^^^^                ^^^

请参阅regex demo

<强>详情

  • There - 文字子字符串
  • \s+ - 一个或多个空格
  • is - 文字子字符串
  • . - 任何字符,但换行符号
  • are - 文字子字符串
  • \s+ - 一个或多个空格
  • (?:\S+\s+)? - 可选序列:
    • \S+ - 1 +非空白字符
    • \s+ - 一个或多个空格
  • (?<threadNumber>\d+) - 一个或多个数字(组“threadNumber”)。

答案 1 :(得分:0)

您可以修改当前表达式,以有条件地查找still

There is\/are (still )?(\d+)

或者您可以在单词thread(s)

之前查找一个数字
(\d+) thread\(s\)