我试图写一个正则表达式来替换电话号码中的所有无效字符:
电话号码示例:
正则表达式应该允许" +"只有当它是字符串中的第一个字符且其余只有数字类型[0-9]
这是我目前的正则表达式:
phone = phone.replaceAll("[/(?<!^)\+|[^\d+]+//g]", "");
答案 0 :(得分:7)
使用这个:[^\d+]|(?!^)\+
phone = phone.replaceAll("[^\\d+]|(?!^)\\+", "");
[^\d+]
匹配的字符不是数字或+
(?!^)\+
匹配字符串开头不的+
个字符在你当前的正则表达式中,[/(?<!^)\+|[^\d+]
只是一个字符类(因此它匹配单个字符,而+
使它重复该字符类,然后你的模式匹配 literal < / em> //g]
string。所以,语法错误。
答案 1 :(得分:2)
使用正则表达式无需任何外观即可实现结果。捕获字符串开头的加号,以便在替换模式中使用$1
反向引用重新插入,并匹配所有非数字。
^(\+)|\D+
在Java中:
.replaceAll("^(\\+)|\\D+", "$1")
模式细节:
^(\+)
- 第1组在字符串开头捕获文字加号\D+
- 除数字以外的一个或多个字符。