PHP正则表达式:组必须以字符结尾但不捕获此字符

时间:2013-09-24 18:35:55

标签: php regex

示例正则表达式:

/^([\w]+:)?other:(.*)$/

示例字符串:

test:other:words...

第一组匹配“test:”,但我希望它只捕获“test”。起初我想:

/^([\w]+)?:?other:(.*)$/

但我意识到我不能在一开始就有一个。如何捕获一个如果存在必须以结尾的组,但该不能被该组捕获?

输入和输出示例:

randomString:constantString:somethingElse

应该将'randomString'作为第一组。

constantString:somethingElse

应该将第一组视为空

2 个答案:

答案 0 :(得分:2)

如果您希望您的第一个单词是可选的,请使用:

/^(?:(\w+):)?other:(.*)$/

此正则表达式将\w+:作为非捕获组作为一个整体,并使其成为可选项。此外,它还使用内部捕获组来捕获\w+部分。

因此,如果\w+:存在,则组1包含\w+部分,否则它包含空字符串。

答案 1 :(得分:1)

我们走了:

^(?:(\w+):)?constantString:(.*)$

(?:)是非捕获组

Demo