鍍金池/ 問答/Java  PHP  Python  HTML/ 一個正則表達式問題!

一個正則表達式問題!

需要匹配以Chapter|Section開頭,以數(shù)字結尾的字符串
如"Character 1","Section 132"
但是只需要獲得尾部數(shù)字
一開始用了這個正則
/^(?<=(?:Chapter|Section)[ t]*)d+$)/
發(fā)現(xiàn)匹配不成功
/(?<=(?:Chapter|Section)[ t]*)d+$)/
去掉^可以就可以匹配到數(shù)字了

但是為什么加了^就不能匹配到了呢,是什么導致匹配失敗了呢
求解

回答
編輯回答
青裙

?<=是斷言,斷言常和零寬這個詞一起出現(xiàn),零寬斷言是在文本的某個位置判斷這個位置前面或者后面的字符滿足或者不滿足一些條件,具體是向前還是向后,滿足還是不滿足就和具體的斷言類型相關了。需要特別注意的是,斷言只是匹配一個位置,并不匹配一個具體的字符,所以是零寬。

/^(?<=(?:Chapter|Section)[ t]*)d+$)/這個正則

  1. 首先匹配字符串的開始;
  2. 然后是一個斷言,這個斷言用于判斷該位置前面的字符滿足Chapter|Section)[ t]*,注意此時匹配的位置并未發(fā)生改變,還是在字符串的開始;
  3. 然后匹配1到多個數(shù)字,注意開始匹配的位置還是在字符串的開始;
  4. 然后是字符串的結尾;

綜上,結合1,3和4,這個字符串就是由1到多個數(shù)字組成的;結合2,這個字符串開始的前面還需要匹配一些字符,這明顯是矛盾的,一個字符串的開始位置前面怎么還會有字符。所以這個正則什么也匹配不了。

/(?<=(?:Chapter|Section)[ t]*)d+$)/去掉^以后,這個正則匹配成功的條件是在字符串中存在這樣一個位置,這個位置前面滿足Chapter|Section)[ t]*,后面是1到多個數(shù)字,然后是字符串的結尾。

2018年5月15日 00:04
編輯回答
痞性

^放在(?:)前面。

需要匹配以Chapter|Section開頭,以數(shù)字結尾的字符串

并不是加了^就會出錯,而是位置不對。
去掉^只是規(guī)避掉這個問題而非解決,畢竟帶不帶^是有邊界區(qū)別的。

2018年3月24日 22:58
編輯回答
柒槿年

不知道樓主這樣寫行不行.
^(Character|Section) d+$
看不大懂你的那個[ t]寫法...
直接拷貝你的規(guī)則去https://regexr.com/ 會報錯...
樓主能否解釋下我也學習學習= =...不好意思哈哈

2017年3月14日 03:57