2013-06-03 2 views
0

Мне нужно регулярное выражение, чтобы получить номера телефонов без кодов стран, если они есть. Похоже, что обходные пути должны работать для этого, но я не могу дойти до окончательного решения. Вот темы:regex префикс пропуска, если он есть, например код страны

In-country: 0008003428573 
Outside: +91 4058 825058 
With dots: +91.88.4732.1354 

желаемая матчи:

8003428573 
4058 825058 
88.4732.1354 

Я знаю, что могу использовать (?!91), чтобы избежать согласования 91, таких как

(?!91)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

... но потом он соответствует 1, как 1 4058 825058.

Я также нашел полное решение с использованием, если-то условие, при тестировании в Perl:

(?!91)(?(?=1)(?<!9)|)[1-9][-. 0-9]{8,11}[0-9](?![0-9])

, но потом выяснилось, что не работает с NSRegularExpression в Objective C.

The решение не может использовать группы, так как у меня есть несколько регулярных выражений для разных ситуаций, которые обрабатываются одним и тем же кодом. Код не может использовать группу 1 в некоторых случаях и группу 2 в других. Если нет способа решить это с помощью регулярных выражений. «91» не должен находиться в общем совпадении.

Есть ли способ сделать это с регулярным выражением в Obj-C?

ответ

0

Решение с использованием групп, обратите внимание, что группа с результат всегда в группе 1, так как остальные группы не захватываются! Группа, которая начинается с ?:, представляет собой группу, не связанную с захватом.

(?:\b0+|\B\+91[. ]?)([1-9]\d+(?:[. ]\d+)*)\b 

Посмотри here on Regexr. Когда вы наводите указатель мыши на совпадение, вы можете увидеть содержимое единственной группы.