2017-02-26 143 views
2

任選的基團我需要捕獲可選文本的圖案,與所提取的實例i9,在下面的匹配場景Caffèyou捕獲在正則表達式

  • 有效的匹配:

    love! 
    9 love! 
    love Caffè! 
    i love you! 
    
  • 無效的比賽:

    love 
    iloveyou 
    

我的rule[*] love [*]!,其中[*]表示空白文本可以接受被捕獲。

我試圖使正則表達式((?:.+))?love((?:.+))?!online),但它未能捕獲正確的文本。

+0

關於爲什麼你會匹配你的有效例子,但不是你的無效匹配有什麼規則 - 有很多方法可以解釋這一點。 – Theo

+4

呃,也許['(?:(。+))?love(?:(。+))?!'](https://regex101.com/r/aJWQHI/4)按預期工作? –

+0

你說的文字是可選的,但後來說「愛」本身是無效的。那麼,這是什麼?你確定你瞭解自己的要求嗎? –

回答

2

您可以交換你capturingnon-capturing groups

(?:(.+))?love(?: (.+))?! 
^^   ^^ 

regex demo

現在,你將有內羣體的文本將沒有空間,因爲他們是非獲取的一部分僅用於分組子模式的組。

+0

對不起,如果我想讓字符'!'可選,例如:https://regex101.com/r/ZptHNN/3現在的正則表達式不能正常工作,就像從'i愛你! not'。 – MiP

+0

是的,'!'在這裏非常重要,因爲它是一個強制子模式並且「錨定」了右邊的匹配。那麼右邊界的規則是什麼? –

+0

你的意思是讓'(?:(。+))?'正常工作,應該總是有強制性的字符而不是可選的嗎? – MiP