我正在编写一个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_]
)位于字符串的开头/结尾或非单词字符的旁边时。