1

模式匹配超出预期。如果有人可以解释为什么“地址”是后视的一部分时匹配,以及如何防止这种情况。提前感谢您对此的任何帮助。

图案:

(?<=@address|)[a-zA-Z]+(?=[^\]\[]*\])

细绳:

test [@address|singleline second] test

结果:

address singleline second
4

2 回答 2

3

你需要逃避|

(?<=@address\|)[a-zA-Z]+(?=[^\]\[]*\])

因为(?<=@address|)断言匹配的字符串前面是@address空字符串或空字符串。(并且由于所有内容始终以空字符串开头,因此无效。)

顺便说一句,一个小术语说明:(?<=@address|)叫做向后看,而不是向前看。前瞻断言,例如 your (?=[^\]\[]*\])断言正则表达式中的给定点是(或不是)后跟指定模式。

于 2012-03-06T22:37:07.647 回答
0

环顾四周甚至没有必要。

您似乎希望结果为“单行”。(你的标记 a-zA-Z 只是字母,内部数据是空格分隔的,整个模式就是这样。)

及地址| 是静态的。

那么,为什么不少环顾四周,而只是消耗

/@address\|(\w+).*?\]/g   //$1 has the capture.

除了更简单之外,一个可能的好处是:如果您必须在大量数据上全局运行它,那么您将匹配到 last ],而不是只匹配到ein 'singleline'。

于 2012-03-07T05:29:12.320 回答