在Java正则表达式中转义点序列会引发异常

时间:2013-01-08 02:56:14

标签: java regex escaping

我正在尝试使用一个简单的正则表达式来搜索部分内的几个字符,包括查找.字面值。但是,Pattern编译器声称它无效。

以下是抛出格式异常的完整正则表达式的摘录。转义看起来正确,它只是将.视为不应转义的内容。

([a-zA-Z0-9_-\.\s]{1,})
              ^

我也尝试了"([a-zA-Z0-9_-\\\\.\\s]{1,})"(与上述相同但有两个\以逃避.)没有运气。

我在互联网上找到的用于逃避点角色的所有资源都表明这应该有效。

我错过了什么?

2 个答案:

答案 0 :(得分:5)

问题不在.中,而在-之前。试试"([a-zA-Z0-9_\\-.\\s]{1,})"

-是字符类[...]中的元字符。它指定[a-z]之类的字符范围可以匹配Unicode表中az(包括)之间的字符。如果你在没有可能被处理的地方使用它作为范围操作符,如在字符类[-...] [...-]的开头或结尾处,它将被视为正常字符,因此在这种情况下你不会不得不逃避它。否则,您需要先使用\将其更改为简单的文字。

答案 1 :(得分:2)

在正则表达式中,-和点.都被视为元字符。如果除了字母数字之外,您还需要查找.-,它应该是[a-zA-Z0-9[\.\-]][a-zA-Z0-9[\Q.-\E]]