正则表达式:如何选择匹配开头或结尾的东西,但不是两者都匹配?

时间:2010-01-28 08:54:18

标签: regex

我的情况是正则表达式是这样的: ^b?A+b?$

因此b 可能在字符串0或1开头匹配,而A 必须匹配一次或多次。再次b 可能在字符串结尾处匹配0或1次。

现在我想修改这个正则表达式,使其在字符串的开头或结尾处匹配b,但不能同时匹配。{/ p>

我该怎么做?

3 个答案:

答案 0 :(得分:9)

你可以使用reresxps中的一个漂亮的“或”运算符。

^(b?A+|A+b?)$

答案 1 :(得分:2)

试试这个:

^(bA+|A+b?)$

这允许在开始时b,然后在开始时至少有一个A或一些A,最后可选b。这涵盖了所有可能性,并且在它不匹配的情况下比接受的答案略快,因为只需要测试两个选项中的一个(假设A不能以b开头)。

只是与这里的其他答案不同,如果表达式A非常复杂但b很简单,那么您可能希望使用负向前瞻来避免重复A中的整个表达式正则表达式:

^(b(?!.*b$))?A+b?$

如果您的A很复杂,第二个可能更具可读性,但如果性能是个问题,我建议采用第一种方法。

答案 2 :(得分:1)

^(b+A+b?|b?A+b+)$

为什么不起作用?