使用可选的开始和结束字符捕获组

时间:2016-11-06 15:29:30

标签: php regex

我有以下字符串:find me String1\String2\String3,所以我想捕获string1,2和3(如果它们存在)。字符串3可以是可选的。

到目前为止,我能做的是:(?<=find me)\s(\\?[\w]+\\?){1,3},我的假设是:

  • 字符串在开始时应该有find me但不应该被捕获
  • 一个空白
  • 一个组\作为字符串开始时的可选字符,跟在它后面的一个单词以及它末尾的\,也是可选的,它可以出现1到3次。< / LI>

我的正则表达式模式有什么问题?

1 个答案:

答案 0 :(得分:1)

假设您的正则表达式支持\G,您可以使用此正则表达式分别捕获所有3个字符串:

(?<=find me |(?<!^)\G\\)\w+

RegEx Demo

\G在上一场比赛结束或第一场比赛的字符串开头处断言位置。

\G匹配上一个匹配的行开头或结尾的位置。在这种情况下,我也有一个负向的后视(?<!^),这意味着不匹配行开始,因此它使\G仅匹配前一个匹配结束的位置。对于您的示例,它匹配两次,即String1的结尾和String2的结尾。