我有以下正则表达式:
String regexContact = "^([0|\\+[0-9]{1,5})?([7-9][0-9]{9})$";
Android在正则表达式结束时指向错误,说:
未封闭的角色类。
我已经筛选了类似的问题,但在我的案例中找不到这个特定错误的答案。我无法知道我的正则表达式本身是否有错。任何帮助将不胜感激。
答案 0 :(得分:1)
^([0|\+[0-9]{1,5})?([7-9][0-9]{9})$
^↑ ^___^ ^ ^^___^^___^ ^
|_______________| |_____________|
第一个[
未关闭,如果您想要按字面意思匹配,则应该将其转义:\\[
,否则您应该使用相应的]
关闭它。
答案 1 :(得分:0)
在Java正则表达式中,[
和]
符号应在字符类中转义,以表示文字符号。
您有[0|\\+[0-9]
,其中[
未转义,并且被视为字符类的起点,使第一个[
不成对,因此错误。
您需要删除第一个[
String pat = "^(0|\\+[0-9]{1,5})?([7-9][0-9]{9})$";
^^
以便匹配:
^
- 字符串开头(0|\\+[0-9]{1,5})?
- 匹配1或0次出现的可选组
0
- 零|
- 或\+[0-9]{1,5}
- 加号和任意1到5位([7-9][0-9]{9})
- 第2组匹配7
,8
或9
,然后是任意九位数字(此处的括号可以删除)$
- 直到字符串结束。请参阅regex demo