Есть ли способ исключить 3 ди git числа, заканчивающиеся на 11, используя регулярные выражения? - PullRequest
0 голосов
/ 31 марта 2020

Я пытаюсь проверить телефонный код города (Северная Америка), проверяя, что номер не начинается с единицы или нуля. Кроме того, номер не должен включать зарезервированные номера, такие как эти (т.е. исключая все, заканчивающиеся на 11).

  • Это будут действительные коды городов: 414, 608, 920, 319, 715
  • Это НЕ будет действительным: 023, 123, 411, 611, 811, 911

Я пробовал несколько вещей, но все же не повезло. Я не очень хорош в регулярных выражениях. Вот моя последняя попытка

\b([2-9](?!11)|[2-9][0-9]{2})\b

Ответы [ 3 ]

2 голосов
/ 31 марта 2020

Ваша попытка очень близка, вам не нужно выражение "либо" в вашем условии сопоставления, просто отрицательный прогноз, который остановит совпадение, если увидит строку. Вот пример некоторого рабочего регулярного выражения:

([2-9](?!11)[0-9]{2})

Вы можете попробовать это здесь

1 голос
/ 31 марта 2020

Это должно работать в соответствии с требованиями, включая 0 и 1. Предостережение.

        String pat = "[2-9]\\d{2}(?<!11)";
        String[] data = {"123","001","212", "321", "449","811", "121", "111", "911", "099"};
        for (String s : data ) {    
            System.out.println(s + " " + (s.matches(pat) ? "valid" : "invalid" ));
        }


Печать

123 invalid
001 invalid
212 valid
321 valid
449 valid
811 invalid
121 invalid
111 invalid
911 invalid
099 invalid
1 голос
/ 31 марта 2020

Решение без негативных взглядов:

([2-9][02-9][0-9]|[2-9][0-9][02-9])
...