我想创建一个与A
,B
和AB
匹配的正则表达式,其中A
和B
是非常复杂的正则表达式。
一种解决方案是使用(A|A?B)
或(AB?|B)
,但我必须重复其中一个表达式。
A?B?
不起作用,因为这也匹配空字符串。
是否可以创建此正则表达式而不重复A
和B
?
答案 0 :(得分:1)
是的,您必须使用轮换,但在PCRE中,您可以使用子程序调用来递归子模式:
A(?<BGroup>B)?|(?&BGroup)
请参阅regex demo。
(?<BGroup>B)
是一个命名的捕获组,其模式以(?&BGroup)
命名的子例程调用重复。
答案 1 :(得分:0)
我会将A和B存储到变量中并创建模式 (AB?| B)来自A和B的连接。这具有增强可读性的优点,因为您可以记录子模式A和B。