我有一個字符串,可能會以;
開始和/或結束。我想匹配並替換這些;
字符串。以下正則表達式的作品,但我怎樣才能讓它更簡單?正則表達式以字符串開始和/或結束 - 如何簡化?
(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$)
這使用結構AB | A | B(A和B或A或B)。
實施例的字符串:
; foo ;bar;
(2匹配)foo ;bar;
(1匹配); foo ;bar
(1匹配)foo ;bar
(0匹配)
我有一個字符串,可能會以;
開始和/或結束。我想匹配並替換這些;
字符串。以下正則表達式的作品,但我怎樣才能讓它更簡單?正則表達式以字符串開始和/或結束 - 如何簡化?
(?:^(;).*)(?:.*(;)$)|(?:^(;).*)|(?:.*(;)$)
這使用結構AB | A | B(A和B或A或B)。
實施例的字符串:
; foo ;bar;
(2匹配)foo ;bar;
(1匹配); foo ;bar
(1匹配)foo ;bar
(0匹配)注意非捕獲組是爲了對模式序列進行分組,如果你o沒有量化羣體,也沒有在內部使用替代品,非捕獲羣體變得多餘。所以,你的正則表達式看起來像沒有這些組的^(;).*.*(;)$|^(;).*|.*(;)$
,你很容易看到在第一個選擇中有一個雙重.*
。將模式減少到^(;).*(;)$|^(;).*|.*(;)$
可以看出,如果第一部分不匹配,第二部分或第三部分會在開始或結束後面找到一個空格,因此第一個替換看起來是多餘的(除非需要拆分替換邏輯3例!)。
所以,如果你只是想更換比賽用1個替換模式,您可以只使用
^;\s*|;\s*$
完美。謝謝! –
外部非捕獲組隻影響readabi lity。預計產量是多少,BTW?試試['^; \ s * |; \ s * $'](https://regex101.com/r/bxvKtd/1)。 –
四種情況下,爲什麼不先處理所有開始,然後全部結束。然後你有兩個獨立的案例。 –