输入“\”时,模式匹配失败

时间:2013-09-18 08:32:41

标签: java regex escaping

我的模式是这样的:

"^[a-zA-Z0-9_'^&/+-\\.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$"

但是当我尝试用反斜杠匹配时,就像这样:

"abc\\@abc"

......它不匹配。任何人都可以解释原因吗?

4 个答案:

答案 0 :(得分:0)

尝试使用额外的反斜杠转义测试字符串的每个反斜杠:例如

"abc\\\\@abc"变为"abc\\\\\\\\@abc"

答案 1 :(得分:0)

尝试以下模式

"^[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,}$";

表达式\\匹配单个反斜杠\

答案 2 :(得分:0)

如果您希望最终结果看起来像"\\\\"

,则需要使用"\"

为什么,你问? Java编译器看到字符串"\\\\"并将其转换为"\\",因为"\"是转义字符。

然后正则表达式会看到字符串"\\"并将其转换为"\",因为"\"是转义字符。

所以想要一个反斜杠,你必须加入四个。

答案 3 :(得分:0)

我假设您在Java源代码中编写正则表达式,如下所示:

Pattern p = Pattern.compile(
    "^[a-zA-Z0-9_'^&/+-\\.]{1,}@{1,1}[a-zA-Z0-9_'^&/+-.]{1,}$"
);

我还假设你的意思是\\.作为反斜杠后跟一个点,而不是一个转义点。

因为它在字符串文字中,所以你必须再次转义反斜杠。这意味着你必须在正则表达式中使用四个反斜杠来匹配目标字符串中的一个反斜杠。您还需要转义-(连字符),以便正则表达式编译器不认为(例如)[+-.]是一个范围表达式,如[0-9]或{{1} }。

[a-z]

我还将您的"^[a-zA-Z0-9_'^&/+\\\\.-]+@[a-zA-Z0-9_'^&/+.-]+$" 更改为{1,},因为它意味着同样的事情,并且摆脱了+,因为它没有做任何事情。我将您的{1,1}更改为&。我不知道那里有什么,但如果你在源代码中这样写,那就错了。