我的模式是这样的:
"^[a-zA-Z0-9_'^&/+-\\.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$"
但是当我尝试匹配带有反斜杠的东西时,就像这样:
"abc\\@abc"
...它不匹配。谁能解释为什么?
"\\\\"
如果您希望最终结果看起来像,则需要使用"\"
你为什么问?Java 编译器看到字符串"\\\\"
并将其转换"\\"
为"\"
转义字符。
之后正则表达式看到字符串"\\"
并将其转换"\"
为"\"
一个转义字符。
所以想要一个反斜杠,你必须输入四个。
尝试使用额外的反斜杠转义测试字符串的每个反斜杠:例如
"abc\\\\@abc"
变成"abc\\\\\\\\@abc"
尝试以下模式
"^[a-zA-Z0-9_'^&/+-\\\\.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$";
或者
"^[a-zA-Z0-9_'^&/+-\\{0,}}.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$";
表达式 \\ 匹配单个反斜杠 \
我假设您正在 Java 源代码中编写正则表达式,如下所示:
Pattern p = Pattern.compile(
"^[a-zA-Z0-9_'^&/+-\\.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$"
);
我还假设您的意思\\.
是反斜杠后跟一个点,而不是转义点。
因为它在字符串文字中,所以您必须再转义一次反斜杠。这意味着您必须在正则表达式中使用四个反斜杠来匹配目标字符串中的一个。您还需要转义-
(连字符),这样正则表达式编译器就不会(例如)认为[+-.]
它是一个范围表达式,例如[0-9]
or [a-z]
。
"^[a-zA-Z0-9_'^&/+\\\\.-]+@[a-zA-Z0-9_'^&/+.-]+$"
我也将您的更改{1,}
为,+
因为它意味着同样的事情,并摆脱了,{1,1}
因为它没有做任何事情。我把你改成&
了&
. 我不知道那是怎么进去的,但如果你在源代码中这样写,那就错了。