[英]Positive lookahead not working as expected
前瞻不消耗正在搜索的字符串。 這意味着[ s]
試圖匹配緊接black的空格或s 。 但是,先行說明您的手必須跟隨black ,因此正則表達式永遠無法匹配任何內容。
要在使用前瞻時匹配黑手或黑手,請在前瞻中移動[ s]
: black(?=hand[ s])
。 另外,也不要完全使用前瞻性: blackhand[ s]
。
你正則表達式是不匹配blackhands
或blackhands
,因為它試圖匹配一個空格或字母s
(字符類[ s]
文本后右) black
,也展望未來hand
后, black
。
為了匹配兩個輸入,您需要提前進行以下操作:
/black(?=hands?)/
或者只是不使用任何先行方式並使用:
/blackhands?/
簡而言之,您應該使用
/\bblackhands?\b/
現在,您的正則表達式對於此任務有點太復雜了。 它包括
black
-從字面上匹配black
(?=hand)
-正向提前, 要求 hand
在black
之后立即出現- 但不消耗字符,引擎停留在字符串中的相同位置! [ s]
-一個字符類,它緊隨black
之后匹配一個空格或s
。 因此,您永遠不會獲得匹配,因為空格或s
不會出現在hand
的第一個位置(它是h
)。
這是環顧四周的工作方式 :
區別在於,環顧四周實際上是匹配字符,但隨后放棄了匹配,僅返回結果:match或no match 。 這就是為什么它們被稱為“斷言”的原因 。 它們不使用字符串中的字符,而僅聲明是否可以匹配。
在您的情況下,則沒有必要。 只需使用\\b
( 單詞邊界 )即可匹配整個單詞blackhand
或blackhands
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.