3 回答

TA貢獻1821條經(jīng)驗 獲得超6個贊
查找是零寬度斷言。他們檢查一個正則表達式(對當前位置的右或左-基于前面或后面),在找到匹配時(基于正還是負)成功或失敗,并丟棄匹配的部分。它們不使用任何字符-后面的正則表達式的匹配(如果有的話)將從相同的光標位置開始。
- 積極展望:
語法:
(?=REGEX_1)REGEX_2
只有在REGEX_1匹配時才匹配;匹配REGEX_1之后,將丟棄該匹配,并從相同位置開始搜索REGEX_2。
例子:
(?=[a-z0-9]{4}$)[a-z]{1,2}[0-9]{2,3}
REGEX_1是[a-z0-9]{4}$
它匹配四個字母數(shù)字字符,后面跟著行尾。
REGEX_2[a-z]{1,2}[0-9]{2,3}
它匹配一個或兩個字母,后面跟著兩個或三個數(shù)字。
REGEX_1確保字符串的長度確實是4,但不消耗任何字符,因此REGEX_2的搜索從相同的位置開始?,F(xiàn)在,REGEX_2確保字符串與其他規(guī)則匹配。如果不向前看,它將匹配長度為3或5的字符串。
- 負前瞻
語法:
(?!REGEX_1)REGEX_2
只有在REGEX_1不匹配的情況下才匹配;在檢查REGEX_1之后,對REGEX_2的搜索將從相同的位置開始。
例子:
(?!.*\bFWORD\b)\w{10,30}$
前瞻部分檢查FWORD
在字符串中,如果它找到它,就會失敗。如果它找不到FWORD
,前瞻成功,下面的部分將驗證字符串的長度是否介于10到30之間,并且只包含單詞字符。a-zA-Z0-9_
向后看類似于向前看:它只是看在當前光標位置的后面.像javascript這樣的regex版本不支持前瞻性斷言。而大多數(shù)支持它的風格(PHP、Python等)都需要有一個固定長度的前瞻性部分。

TA貢獻1802條經(jīng)驗 獲得超4個贊
(?=) - positive lookahead(?<=) - positive lookbehind
A B C #in a line
- 3 回答
- 0 關(guān)注
- 677 瀏覽
添加回答
舉報