Регулярное выражение не работает (Java) - PullRequest
0 голосов
/ 29 марта 2012

Я хочу сделать регулярное выражение, соответствующее форме (+ 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 + ).Но это не работает.Что я делаю не так?

Спасибо

Ответы [ 5 ]

5 голосов
/ 29 марта 2012

Регулярное выражение, которое я создал как, начинается с скобки (()

Нет, он начинается с конструкции группировки - это то, что означает неэкранированный ( в регулярном выражении Я не подробно рассмотрел остальную часть выражения, но попробуйте просто выйти за скобки:

String regEx = "\\([+]\\d{2}\\)-\\(\\d{2}\\)-\\d+";

Или более хороший (IMO) способ сказать, что вам нужен +

String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";
2 голосов
/ 29 марта 2012

Избегайте скобок и тире

1 голос
/ 29 марта 2012

Вам нужно избежать паразитов (как уже упоминал Джон, они создают группу захвата):

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..");
     }

}

Вывод:

Номер телефона действителен

0 голосов
/ 29 марта 2012

если символ плюс всегда присутствует, вы можете просто написать \\+, если он может присутствовать или не быть, \\+?.Вы должны экранировать все специфичные для регулярных выражений символы, такие как

String regEx = "\\(\\+\\d{2}\\)-\\(\\d{2}\\)-\\d+";
0 голосов
/ 29 марта 2012

Правильное регулярное выражение

[(][+]\\d{2}[)]-[(]\\d{2}[)]-\\d+

Вам просто нужно поставить скобки между [и].

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...