我正在尝试使用一个简单的正则表达式来搜索部分内的几个字符,包括查找.
字面值。但是,Pattern
编译器声称它无效。
以下是抛出格式异常的完整正则表达式的摘录。转义看起来正确,它只是将.
视为不应转义的内容。
([a-zA-Z0-9_-\.\s]{1,})
^
我也尝试了"([a-zA-Z0-9_-\\\\.\\s]{1,})"
(与上述相同但有两个\
以逃避.
)没有运气。
我在互联网上找到的用于逃避点角色的所有资源都表明这应该有效。
我错过了什么?
答案 0 :(得分:5)
问题不在.
中,而在-
之前。试试"([a-zA-Z0-9_\\-.\\s]{1,})"
-
是字符类[...]
中的元字符。它指定[a-z]
之类的字符范围可以匹配Unicode表中a
和z
(包括)之间的字符。如果你在没有可能被处理的地方使用它作为范围操作符,如在字符类[-...]
[...-]
的开头或结尾处,它将被视为正常字符,因此在这种情况下你不会不得不逃避它。否则,您需要先使用\
将其更改为简单的文字。
答案 1 :(得分:2)
在正则表达式中,-
和点.
都被视为元字符。如果除了字母数字之外,您还需要查找.
和-
,它应该是[a-zA-Z0-9[\.\-]]
或[a-zA-Z0-9[\Q.-\E]]
。