2015-05-18 2 views
0

Regex:Perl регулярное выражение для соответствия номера телефонов

\b(\(\d{3}\)|\d{3})?[-.]?\d{3}[-]?\d{4}\b 

Мой входной файл имеет два типа номеров телефонов. Один, чьи первые 3 цифры заключены в круглые скобки, а другие без круглых скобок. Например:

"(201)-450-4479" ,"234-345-3456" 

Я хочу, чтобы соответствовать оба типа телефонных номеров с использованием альтернативного оператора.

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

+0

За исключением первого '\ b' ваше регулярное выражение кажется правильным. – Toto

ответ

0

Я хотел бы использовать это:

(\(?\d+\)?\-\d+\-\d+)

или с использованием альтернативного оператора:

(\d+\-\d+\-\d+|\(\d+\)\-\d+\-\d+)

+0

Спасибо за ответ. Оба вышеуказанных выражения дают ожидаемые результаты. Мне просто интересно узнать, что случилось с моим выражением? – Pramod

+0

Не могли бы вы предложить мне, что не так с этим выражением? ((\ D + | \ (\ d + \)) \ - \ d + \ - \ d +) ". Результат этого exp "(201) -340-2011 (201) 234-345-3456 234 (201) -450-4479 (201)". Дубликаты первых трех цифр печатаются после каждого успешного матча. – Pramod

+0

@Pramod - сначала вам нужно избежать символа '(' как: '' '(' – fugu

1

\b матчи на словесно-nonword границе. Если такая граница должна появиться до (, ей должен предшествовать символ слова, а не пробел или ничего.

Cf.

print /\b\(/ ? 1 : 0 for '(', ' (', 'a('; 

Удалите исходный \b из регулярного выражения, или заменить его

(?x: \b | \s | ^) 
+0

Спасибо за быстрый ответ. Ваш комментарий был полезен. – Pramod

Смежные вопросы