[英]Understanding Positive Look Ahead Assertion
(?= ...)
積極的前瞻性斷言。 如果包含的正則表達式(由...表示)在當前位置成功匹配,則成功,否則失敗。 但是,一旦嘗試了包含的表達式,匹配引擎將根本無法前進 。 模式的其余部分將在斷言開始的地方嘗試。
我正在嘗試了解Python中的正則表達式。 您能幫我理解第二句話,尤其是粗體字嗎? 任何示例將不勝感激。
環顧四周是零寬度的斷言。 他們不消耗字符串上的任何字符。
簡要觸摸文檔的粗體部分:
這意味着在向前看之后,正則表達式引擎從開始查找的位置回到字符串的相同位置。 從那里,它可以再次開始匹配...
關鍵點:
您可以獲得零寬度的匹配,該匹配不消耗任何字符。 它僅與字符串中的位置匹配。 零寬度點是一種驗證,以查看是否可以匹配正則表達式,或者不將它們添加到整體匹配中,就可以從當前位置向前或向后查找正則表達式。
通常,正則表達式引擎會與正則表達式匹配,逐字符“消耗”您的字符串字符。
如果使用先行運算符,則引擎將在查找匹配項時簡單地向前看而不會“消耗”任何字符。
例
一個很好的例子是一個正則表達式來匹配密碼,該密碼需要一個數字並且長度在6到20個字符之間。
您可以編寫兩項檢查(一項檢查數字是否存在,一項檢查字符串長度是否符合要求),或使用一個正則表達式:
(?=.*\d).{6,20}
第一部分(?=.*\\d)
檢查字符串中是否有數字。 完成后,我們再次回到字符串的開頭(我們只是“向前看”),如果通過了,就進入正則表達式的下一部分。
現在.{6,20}
不再是前瞻,而是開始使用該字符串。 當整個字符串消耗完后,將找到一個匹配項。
示例形式的答案。 在字符串"xy"
:
(?:x)
將匹配"x"
(?:x)x
將不匹配,因為x
后面沒有其他x
(?:x)y
將通過先於x
然后y
來匹配"xy"
。
(?=x)
將在字符串的開頭匹配""
,因為x
緊隨其后。
(?=x)x
將與"x"
匹配-它識別出x
跟隨其后,然后越過它。 (?=x)y
將不匹配,因為它確定后面跟隨有x
,但隨后嘗試使用y
超越它。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.