我今天使用的是java regexp,发现不允许使用以下正则表达式序列
String pattern = "[a-zA-Z\\s\\.-\\)\\(]*";
Run Code Online (Sandbox Code Playgroud)
如果我使用它它将失败并告诉我\(不是一个有效的字符.
但是,如果我将正则表达式更改为
String pattern = "[[a-zA-Z\\s\\.-]|[\\(\\)]]*";
Run Code Online (Sandbox Code Playgroud)
然后它会工作.这是regxp引擎中的错误还是我不了解如何使用引擎?
编辑:我的字符串中有一个错误:不应该有2个开始[[,它应该只有一个.现在已经纠正了
你的正则表达式有两个问题.
你还没有关闭角色类.
将-充当范围内运营商.在LHS和(在RHS.但是在unicode (之前.,所以这会导致无效范围.
要修复问题1,请关闭char类,或者如果您打算不包含[允许的字符,请删除其中一个[.
要修复问题2,要么转义为-as ,要么\\-移动-到char类的开头或结尾.
所以你可以使用:
String pattern = "[a-zA-Z\\s\\.\\-\\)\\(]*";
Run Code Online (Sandbox Code Playgroud)
要么
String pattern = "[a-zA-Z\\s\\.\\)\\(-]*";
Run Code Online (Sandbox Code Playgroud)
要么
String pattern = "[-a-zA-Z\\s\\.\\)\\(]*";
Run Code Online (Sandbox Code Playgroud)
您应该只-在字符类的末尾使用短划线,因为它通常用于显示范围(如a-z).重新排列:
String pattern = "[[a-zA-Z\\s\\.\\)\\(-]*";
Run Code Online (Sandbox Code Playgroud)
另外,我认为你不必转义(.)括号内的字符.
更新:正如其他人指出的那样,您还必须[在java正则表达式字符类中进行转义.
| 归档时间: |
|
| 查看次数: |
10594 次 |
| 最近记录: |