您的第一个问题是您需要交替使用三个(可能是四个)案例,而不是两个。
/\breverse!(?:\s|$)/
逆转!通过它自己
/\bpush\b/
自己推
/\breverse!push\b/
一起
/\bpushreverse!(?:\s|$)/
这是可能的情况
您的第二个问题是 a\b
在 a 之后不匹配,"!"
因为它不是 a \w
。以下是Perl 5 的内容\b
,您可能需要查阅您的文档以查看他们是否同意:
单词边界(“\b”)是两个字符之间的一个点,它的一侧有一个“\w”,另一侧有一个“\W”(以任意顺序),计算虚构字符字符串的开头和结尾与“\W”匹配。(在字符类中,“\b”表示退格而不是单词边界,就像它通常在任何双引号字符串中所做的那样。)
因此,您需要的正则表达式类似于
/ \b ( reverse!push | reverse! | push ) (?: \s | \b | $ )+ /gx;
我省略了,/s
因为这个正则表达式中没有句点,所以将其视为单行是没有意义的。如果/s
不意味着将其视为引擎中的单行,则您可能应该将其添加回来。此外,您应该阅读您的引擎如何处理交替。我知道在 Perl 5 中要获得正确的行为,您必须以这种方式排列项目(否则反向!总是会胜过反向!推)。