不知道如何正确使用环顾来实现我的正则表达式匹配



我正在编写一个perl脚本,其中一部分要求我匹配字符串中某个模式的所有出现。当然,正则表达式似乎足够强大,但我就是无法为这个特定的字符串正确使用它。

一个关于正则表达式可能应用于的文本类型的假设示例是:

1cat;2dog;!3monkey;!4horse;

可以看到,行中有几个数据项(1cat、2dog等),用分号分隔。行首不包含分号,但行尾包含。我希望能够匹配所有没有被需要的东西。在上面的例子中,1cat和2dog将在列表上下文中匹配并返回,而3monkey和4horse则不会。

到目前为止,我所尝试做的是使用负向后看来只注意没有!的条目。像这样:

m/(?<!!)(w+);/g

然而,

不起作用,因为对于每个!' '的条目,正则表达式只匹配它后面的内容,直到分号。在这个例子中,捕获了1只猫和2只狗,但随后捕获了猴子和马。

我觉得这很容易做到,但我是正则表达式的新手,我想不出任何其他的

在那里添加一个词边界(b),你应该很好:

(?<!!)b(w+);

正如您可以告诉的那样,后面的负面视图工作,但它仍然匹配下一个字符(horse!4horse)之后的所有内容。字边界是一个零宽度断言,有点像一个不匹配任何东西的条件(如锚^$)。它断言:(^w|wW|Ww|w$)。换句话说,当一个单词字符([a-zA-Z0-9_])位于字符串的开头/结尾或非单词字符的旁边时。

最新更新