2016-11-06 50 views
1

我有以下字符串:find me String1\String2\String3,所以我想捕獲字符串1,2和3,如果它們存在。字符串3可以是可選的。可選開始和結束字符的捕獲組

到目前爲止,有什麼我可以做的是:(?<=find me)\s(\\?[\w]+\\?){1,3},我的假設是:

  • 該字符串應該有find me在beggining但它不應該被捕獲
  • 一個空白
  • 一組\作爲字符串開始處的可選字符,它後面有一個單詞並在末尾有一個單詞\,可選也可以出現1到3次。

我的正則表達式模式有什麼問題?

+0

什麼是你的正則表達式? – anubhava

+0

只有最後一個匹配,即'String3'將在您的第二個捕獲組中可用。 – anubhava

+0

@anubhava我其實不知道,我正在用php做。 –

回答

1

假設你的正則表達式的味道支持\G,您可以使用此正則表達式來分別捕獲所有3個字符串:

(?<=find me |(?<!^)\G\\)\w+ 

RegEx Demo

\G在以前的比賽結束或將開始斷言位置第一場比賽的字符串。

\G匹配任一行開始或前一次匹配結束的位置。在這種情況下,我也有一個負面的後視(?<!^)這意味着不匹配行開始,因此它使\G只匹配前面匹配結束的位置。例如,它會匹配兩次,即String1的結尾和String2的結尾。

+0

你能解釋一下嗎?(?<!^)\ G \'。我無法理解它究竟做了什麼。 –

+0

'\ G'匹配一個位置,該位置或者行開始或者前一個匹配的結束。在這種情況下,我也有一個負面後視「(?<!^)'這意味着不匹配行開始,因此它使'\ G'只匹配前面匹配結束的位置。對於你的例子,它匹配兩次,即「String1」的結尾和「String2」的結尾。 – anubhava

相關問題