我需要一个回归,找到所有单个反斜杠后跟一个字母。
所以我想找到像这样的模式中存在的反斜杠:
$email_header .= "Disposition-Notification-To: $from\r\n";
$email_header .= "X-Confirm-Reading-To: $from\r\n";
而不是这些模式:
\a
\f
\test
由于
答案 0 :(得分:1)
已更新:
@Amadan在下面的评论中指出,JavaScript并没有实现lookbehind,这基本上打破了我的原始答案。
this stackoverflow post中提出的方法可能是解决此问题的合理途径。
基本上海报建议反转字符串并使用前瞻来匹配。如果我们这样做,那么我们希望匹配一串字母字符后跟一个反斜杠,但不会跟随多个反斜杠。正则表达式如下:
/[a-zA-Z]+\\(?![\\]+)/g
[a-zA-Z]+ - match one or more alphabetic characters
\\ - followed by a single backslash
(?![\\]+) - not followed by one or more backslashes
g - match it globally (more than one occurrence)
这种方法的缺点(除了必须反转你的字符串)是你不能只匹配反斜杠,但也必须匹配它之前的字母字符(因为JS没有lookbehind)
原始答案(使用lookbehind):
/(?<!\\)\\[a-zA-Z]+/g
(使用negative lookbehind)将匹配单个反斜杠,后跟一个或多个字母,无论大小写如何。这个正则表达式分解如下:
(?<!\\)\\ - use negative lookbehind to match a \ that is not preceded by a \
[a-zA-Z]+ - match one or more letters of the alphabet, regardless of case
g - match it globally
如果您只想匹配\
而不是字母字符,则可以使用positive lookahead。正则表达式如下:/(?!>\\)\\(?=[a-zA-Z]+)/g
并会像这样分解:
(?<!\\)\\ - use negative lookbehind to match a \ that is not preceded by a \
(?=[a-zA-Z]+) - and is followed by one or more alphabetic characters
g - match it globally
如果您只希望正则表达式在行的开头匹配反斜杠,请在其前面添加^
。
您可以使用Rubular之类的工具来测试和播放正则表达式。