我是regex的新手,我想知道是否有匹配字符串后选择所有数字?
例如:
输入:
important string
abc 100
def 50
ghi jk 10
m 60
not important string
aa 90
bb 20
作为输出,我想选择所有这些数字:100,50,10,60
我试过important string[\w\n ]* (\d+)
,但我只有60
非常感谢!
答案 0 :(得分:2)
用于匹配某些文本之间多次出现的通用PCRE方法是使用基于\G
的模式,该模式允许在上一次成功匹配结束时锚定匹配项:
(?:\G(?!\A)|(?<!\bnot )important string)(?:(?!not important string)\D)*?\K\d+
请参阅regex demo
基本上,
(?s)(?:\G(?!\A)|STARTING_DELIMITER_STRING)(?:(?!END_DELIMITER_STRING).)*?\K\d+
或者,为了保持在最初的STARTING_DELIMITER_STRING
边界内,请将其添加到否定前瞻:
(?s)(?:\G(?!\A)|STARTING_DELIMITER_STRING)(?:(?!STARTING_DELIMITER_STRING|END_DELIMITER_STRING).)*?\K\d+
<强>详情:
(?:\G(?!\A)|(?<!\bnot )important string)
- 上一次成功匹配(\G(?!\A)
)结束或important string
文字字符序列前面没有not
+空格(?:(?!not important string)\D)*?
- 除了数字(\D
)以外的任何字符,尽可能少出现0次,这不是not important string
字符序列的起点\K
- 匹配重置运算符\d+
- 1+位数