如何在不创建捕获组的情况下使用交替?

时间:2014-10-12 22:18:43

标签: php regex

我想从以下文本中提取网址:

this is text

bla bla bla


http://dev.pricewombat.com/d/4
http://www.pricewombat.com/d/12/Spalding-Premier-Excel-Basketball-15-Free-Store-Pickup

我写了以下正则表达式:

^(https?:\/\/(dev|www).pricewombat.com\/d\/[^ \n]+)$

http://regex101.com/r/iJ1fZ0/1

但是,如果您注意到我正在使用(dev|www)的替换,并且因为使用了括号,它会创建一个我不想要的捕获组。

是否可以在不创建捕获组的情况下使用交替?

请注意,这与“类似问题”的问题不同:Can I use an OR in regex without capturing what's enclosed?

编辑:显然它实际上与上面的问题相同,我只是误解了?:运算符的工作原理。

1 个答案:

答案 0 :(得分:4)

是的,您想要使用Non-capturing组。通过在左括号后面立即放置?:,您可以指定不要捕获该组,而只是简单地对表达式进行分组。

(?:dev|www)  # group, but do not capture: 'dev' OR 'www'