我在想对此有什么可靠的方法。
我尝试通过以下方式匹配失败:
[A-Za-z]*&[A-Za-z]*
返回:
所以环境上的错误\\&\hskip
。
如何更好地匹配&
字母周围的标记?
答案1
正如@cuonglm所说,*
意味着0个或更多。既然您已经用 Perl 标记了它,我假设您正在使用 Perl 的正则表达式引擎,这意味着您可以使用+
: 1 或更多。因此,您要进行的替换将是以下之一:
匹配字母数字字符或下划线:
s/\w+&\w+/\$$&\$/g
仅匹配字母(请注意,
i
这使得匹配不区分大小写):s/[a-z]+&[a-z]+/\$$&\$/gi
仅匹配“单词”,确保整个单词只包含字母:
s/\b[a-z]+&[a-z]+\b/\$$&\$/gi
答案2
你的问题是*
修饰符,它匹配零或多个字符出现。因此它将匹配&
未被 包围的内容[A-Za-z]
。
您只需要:
[A-Za-z]&[A-Za-z]
甚至更好:
[[:alpha:]]&[[:alpha:]]