Android正则表达式unclosed字符错误

时间:2016-09-01 07:01:14

标签: java regex

我有以下正则表达式:

String regexContact = "^([0|\\+[0-9]{1,5})?([7-9][0-9]{9})$";

Android在正则表达式结束时指向错误,说:

  

未封闭的角色类。

我已经筛选了类似的问题,但在我的案例中找不到这个特定错误的答案。我无法知道我的正则表达式本身是否有错。任何帮助将不胜感激。

2 个答案:

答案 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组匹配789,然后是任意九位数字(此处的括号可以删除)
  • $ - 直到字符串结束。

请参阅regex demo