簡體   English   中英

正向超前無法按預期工作

[英]Positive lookahead not working as expected

我有以下正則表達式,具有積極的前瞻性:

/black(?=hand)[ s]/

我要它匹配黑手黑手 但是,它不匹配任何內容。 我正在Regex101上進行測試。

我究竟做錯了什么?

前瞻不消耗正在搜索的字符串。 這意味着[ s]試圖匹配緊接black的空格或s 但是,先行說明您的必須跟隨black ,因此正則表達式永遠無法匹配任何內容。

要在使用前瞻時匹配黑手黑手,請在前瞻中移動[ s]black(?=hand[ s]) 另外,也不要完全使用前瞻性: blackhand[ s]

你正則表達式是不匹配blackhandsblackhands ,因為它試圖匹配一個空格或字母s (字符類[ s]文本后右) black ,也展望未來hand后, black

為了匹配兩個輸入,您需要提前進行以下操作:

/black(?=hands?)/

或者只是不使用任何先行方式並使用:

/blackhands?/

關於環視的良好參考

簡而言之,您應該使用

/\bblackhands?\b/

現在,您的正則表達式對於此任務有點太復雜了。 它包括

  • black -從字面上匹配black
  • (?=hand) -正向提前, 要求 handblack之后立即出現- 但不消耗字符,引擎停留在字符串中的相同位置!
  • [ s] -一個字符類,它緊隨black之后匹配一個空格或s

因此,您永遠不會獲得匹配,因為空格或s不會出現在hand的第一個位置(它是h )。

這是環顧四周的工作方式

區別在於,環顧四周實際上是匹配字符,但隨后放棄了匹配,僅返回結果:match或no match 這就是為什么它們被稱為“斷言”的原因 它們不使用字符串中的字符,而僅聲明是否可以匹配。

在您的情況下,則沒有必要。 只需使用\\b單詞邊界 )即可匹配整個單詞blackhandblackhands

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM