2017-05-09 95 views
1

我想創建一個匹配A,BAB的正則表達式,其中AB是相當複雜的正則表達式。正確表達式匹配A,B和AB

一個解決方案是使用(A|A?B)(AB?|B),但我必須重複其中一個表達式。

A?B?不起作用,因爲這也匹配空字符串。

是否可以創建此正則表達式而不重複AB

回答

1

是的,你將不得不使用交替,但在PCRE,您可以遞歸子模式與子程序調用:

A(?<BGroup>B)?|(?&BGroup) 

regex demo

(?<BGroup>B)是一個已命名的捕獲組,其模式與(?&BGroup)指定的子例程調用重複。

請參閱Recursive patterns

0

我會去存儲A和B到變量中,並通過連接從A和B創建模式 (AB?| B)。這可以提高可讀性,因爲您可以記錄子模式A和B.