在Perl中,我试图从以下示例字符串中捕获单词作为标记(始终至少有一个单词):
"red" ==> $1 = 'red';
"red|white" ==> $1 = 'red'; $2 = 'white';
"red|white|blue" ==> $1 = 'red'; $2 = 'white'; $3 = 'blue';
etc.
我在这里看到的模式是:WORD,然后是n套" | WORD" [n> = 0]
因此,我有:
/(\ W +)((?:\ |)(\ W +)*)/
根据我的理解,总是匹配第一个WORD,如果存在| WORD对,则根据需要多次捕获。
虽然这不起作用,但我尝试了几个版本:
/ ^(\ W +)(\ |(\ W +))* $ /
......我错过了什么?
答案 0 :(得分:2)
你的第一个正则表达式实际上是错误的 - ":< :D :> :)"
位置错误 - 但我会专注于你的第二个正则表达式,这是正确的:
*
问题是这个正则表达式有三个捕获组:/^(\w+)(\|(\w+))*$/
,(\w+)
和(\|(\w+))
。因此,它最多会填充三个匹配变量:(\w+)
,$1
和$2
。每个匹配变量对应于单个对应的捕获组。这不是你想要的。
您应该做的是使用$3
:
split