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

Qix*_*Qix 1 java regex escaping

我正在尝试做一个简单的正则表达式,在部分内搜索几个字符,包括查找.文字.但是,Pattern编译器说它无效.

以下是抛出格式异常的完整正则表达式的摘录.逃避看起来正确,它只是看到.不应该逃脱的东西.

([a-zA-Z0-9_-\.\s]{1,})
              ^
Run Code Online (Sandbox Code Playgroud)

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

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

我错过了什么?

Psh*_*emo 5

问题并不在.,但在-之前它.尝试"([a-zA-Z0-9_\\-.\\s]{1,})"

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

  • @Qix而不是:当它不是第一个或最后一个字符时你使用它而不转义它;)在字符类中支持这个爆破的`-`是任何正则表达式编写者的头痛问题......当他们尝试实验构造时.遗憾的是,在这方面没有规范规则.为了安全起见,总是在一个字符类中逃避它_unless_你实际上打算用它来表示一个范围(比如在`[az]`中). (2认同)