我想创建一个与(+ 92) - (21)-1234 ... 形式匹配的正则表达式。我做了这个程序
public static void main(String[] args) {
// A regex and a string in which to search are specifi ed
String regEx = "([+]\\d{2})-(\\d{2})-\\d+";
String phoneNumber = "(+92)-(21)-1234567890";
// Obtain the required matcher
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
System.out.println("Phone Number Valid");
} else {
System.out.println("Phone Number must be in the form (+xx)-(xx)-xxxxx..");
}
} //end of main()
我创建的正则表达式以括号开头((),+ [+] ,两个数字( \ d {2} ),支架关闭()),短划线( - ),开始括号((),两个数字( \ d {2} ),括号关闭()),短划线( - ),然后是任意数量的数字( \ d + )。但它没有用。我做错了什么?
由于
答案 0 :(得分:5)
我创建的正则表达式以括号(()
开头
不,它以分组构造开始 - 这是未转义的(
在正则表达式中的含义。我没有详细查看表达式的其余部分,但尝试转义括号:
String regEx = "\\([+]\\d{2}\\)-\\(\\d{2}\\)-\\d+";
或者更好(IMO)说你需要+
String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";
答案 1 :(得分:2)
转出括号和破折号
答案 2 :(得分:1)
你需要逃避括号(正如Jon已经提到的那样,他们创建了一个捕获组):
public static void main(String[] args) {
// A regex and a string in which to search are specifi ed
String regEx = "\\([+]\\d{2}\\)-\\(\\d{2}\\)-\\d+";
String phoneNumber = "(+92)-(21)-1234567890";
// Obtain the required matcher
Pattern pattern = Pattern.compile(regEx);
Matcher matcher = pattern.matcher(phoneNumber);
if (matcher.matches()) {
System.out.println("Phone Number Valid");
} else {
System.out.println("Phone Number must be in the form (+xx)-(xx)-xxxxx..");
}
}
输出:
电话号码有效
答案 3 :(得分:0)
正确的正则表达式是
[(][+]\\d{2}[)]-[(]\\d{2}[)]-\\d+
您只需将括号放在[和]之间。
答案 4 :(得分:0)
如果加号始终存在,您可以写\\+
,如果它可能存在,也可能不存在,\\+?
。你应该逃避所有像这样的正则表达式字符
String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";