2017-04-10 214 views
0

我是新來的正則表達式,我想知道是否有無論如何選擇匹配的字符串後的所有數字?正則表達式選擇字符串後的所有數字

例如:

輸入:

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

你輸入來看,你可能只需要使用'/ \ d +/g'。你可以用你的編程語言來檢查一個字符串是否包含「重要的字符串」。什麼是編程語言? –

+0

@WiktorStribiżew是的..但問題是這個輸入是在另一個大文本,它也有很多數字,和/ \ D +/G將採取所有這些。順便說一句,我用regex101.com來練習,所以我沒有真正使用任何編程語言 –

+0

然後仍然有2個問題:1)你會使用什麼樣的正則表達式? (Regex101有3個提供); 2)什麼是尾部邊界(何時停止收集*重要字符串*之後的數字)? –

回答

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))或不前面有not一個important string字面炭序列的末尾+空間
  • (?:(?!not important string)\D)*? - 除數字以外的任何字符(\D),0+次出現,儘可能少,不是的起始點個字符序列
  • \K - 匹配復位操作
  • \d+ - 1+位數
相關問題