我想創建一個匹配A
,B
和AB
的正則表達式,其中A
和B
是相當複雜的正則表達式。正確表達式匹配A,B和AB
一個解決方案是使用(A|A?B)
或(AB?|B)
,但我必須重複其中一個表達式。
A?B?
不起作用,因爲這也匹配空字符串。
是否可以創建此正則表達式而不重複A
或B
?
我想創建一個匹配A
,B
和AB
的正則表達式,其中A
和B
是相當複雜的正則表達式。正確表達式匹配A,B和AB
一個解決方案是使用(A|A?B)
或(AB?|B)
,但我必須重複其中一個表達式。
A?B?
不起作用,因爲這也匹配空字符串。
是否可以創建此正則表達式而不重複A
或B
?
是的,你將不得不使用交替,但在PCRE,您可以遞歸子模式與子程序調用:
A(?<BGroup>B)?|(?&BGroup)
(?<BGroup>B)
是一個已命名的捕獲組,其模式與(?&BGroup)
指定的子例程調用重複。
我會去存儲A和B到變量中,並通過連接從A和B創建模式 (AB?| B)。這可以提高可讀性,因爲您可以記錄子模式A和B.