正则表达式选择字符串后的所有数字

时间:2017-04-10 09:29:07

标签: regex string numbers match

我是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

非常感谢!

1 个答案:

答案 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+位数