我正在尝试编写一个带有捕获组的PCRE,该捕获组在两个字符串中查找数值。
案例A:
总共有1个线程由此Valve监控并可能卡住。
案例B:
此阀门监控的是10个线程,可能会卡住。
我写了一个正则表达式,当在案例A上运行时返回“1”,但对于案例B,它返回错误的结果“仍然”。如何编写一个为A返回“1”而为B返回“10”?
这就是我所拥有的:
There\s+is.are\s+(?<threadNumber>[^\s]+)]
答案 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\)