我正试图阻止\g锚与字符串的开头匹配。我只想在最后一场正则表达式比赛结束时匹配。
给出以下文本:
Pig, Cow, Goat
fruit: apple, orange, peach, pear
vegetable: Carrot, Lettuce, Cellery
这种模式:
(fruit:|\G)([\w]+|[\, ])
我希望它只匹配“水果:”后面的单词,但我需要它单独捕获每个单词。如果我在这个模式的最后加一个+的话,它会匹配“水果:”后面的所有单词,但它只会捕获“梨”作为最后一个+的迭代。
这就是问题所在。此模式有效,但它也匹配“猪、牛和羊”,因为\g将匹配最后一个匹配的结尾或整个字符串的开头。如何防止它匹配整个字符串的开头?
我在php中使用pcre,我一直在使用rubular.com帮助我做快速测试。
最佳答案
在我看来,你是ReGEX并没有给你你想要的东西。你说你想要“水果:”后面的每个字。举个例子,我不认为你的第一次尝试真的给了你。尝试:
(?:fruit:\s*|\G,\s*)(\w+)
如果你全部匹配,那就应该给你没有空格或标点符号的单词。
这里有一个小结:
(?:
-启动非捕获组fruit:\s*
-匹配良好的前导码|
或\G,\s*)
-最后一个匹配位置,逗号和零个或多个空格(\w+)
捕获一个或多个单词字符编辑:
为了防止在第一行匹配,如果第一行以逗号开头,后跟一个或多个逗号分隔的单词,只需在开始锚点后面的
\G
之前添加一个负零宽度的look:(?:fruit:\s*|(?<!^)\G,\s*)(\w+)