2016-11-07 140 views
1

我有一個字符串,可能會以;開始和/或結束。我想匹配並替換這些;字符串。以下正則表達式的作品,但我怎樣才能讓它更簡單?正則表達式以字符串開始和/或結束 - 如何簡化?

(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$) 

這使用結構AB | A | B(A和B或A或B)。

實施例的字符串:

  • ; foo ;bar;(2匹配)
  • foo ;bar;(1匹配)
  • ; foo ;bar(1匹配)
  • foo ;bar(0匹配)
+1

外部非捕獲組隻影響readabi lity。預計產量是多少,BTW?試試['^; \ s * |; \ s * $'](https://regex101.com/r/bxvKtd/1)。 –

+1

四種情況下,爲什麼不先處理所有開始,然後全部結束。然後你有兩個獨立的案例。 –

回答

1

注意非捕獲組是爲了對模式序列進行分組,如果你o沒有量化羣體,也沒有在內部使用替代品,非捕獲羣體變得多餘。所以,你的正則表達式看起來像沒有這些組的^(;).*.*(;)$|^(;).*|.*(;)$,你很容易看到在第一個選擇中有一個雙重.*。將模式減少到^(;).*(;)$|^(;).*|.*(;)$可以看出,如果第一部分不匹配,第二部分或第三部分會在開始或結束後面找到一個空格,因此第一個替換看起來是多餘的(除非需要拆分替換邏輯3例!)。

所以,如果你只是想更換比賽用1個替換模式,您可以只使用

^;\s*|;\s*$ 

regex demo

+1

完美。謝謝! –

相關問題