2016-04-12 4 views
0

Я нашел эту проблему на regexone.com - http://regexone.com/problem/matching_phone_numbers. Напишите одно регулярное выражение, которое соответствует числу и отображает правильный код области.Необходимо помочь понять это регулярное выражение

Exercise 2: Matching Phone Numbers 

Task  Text   Capture Groups  
Capture 415-555-1234 415  Success 
Capture 650-555-2345 650  Success 
Capture (416)555-3456 416  Success 
Capture 202 555 4567 202  Success 
Capture 4035555678  403  Success 
Capture 1 416 555 9292 416  Success 

Здесь выражение (\d{1}?(\d{2})) захватывает код города, но то, что мне нужно, чтобы понять это моя первая группа только 1 цифра и не является обязательным. И моя вторая группа должна содержать только 2 цифры. Как удалось захватить 3 цифры?

+0

А? Потому что 1 + 2 = 3? Он будет соответствовать либо двум цифрам ('\ d {2}'), либо 3 ('\ d {1} \ d {2}') – h2ooooooo

+0

[* Quantifier: {1}? Точно 1 раз (бессмысленный квантификатор) *] (https://regex101.com/r/xK6sE4/1) –

+0

@ h2ooooooo Как насчет последнего номера 1 416 555 9292? Он пропустил 1 и захватил 416 –

ответ

1

Как отметил ответ @Mateen Ulhaq, первая группа все регулярное выражение дано. Что касается вашего другого вопроса, то, похоже, нет никаких причин для разделения соответствия цифр на две группы. Было бы разумно, если бы коды областей иногда были двузначными, но это не относится ни к одному из приведенных примеров. Регулярное выражение (\d{3}) дает ожидаемый результат для всех из них, а также короче и проще.

2

Ваша первая группа дается первым (.

(\d{1}?(\d{2})) 
^   ^
|    | 
|    | 
everything inside here 

Таким образом, он фиксирует все три цифры.


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

(\d{2,3}) 

, который захватывает все два или три-значные номера.

Если вы хотите, чтобы захватить первую цифру, а также (т.е. 1 800):

((\d\s)?\d{2,3}) 
+1

. Вы должны уточнить в своем ответе, что первая группа включает в себя все три цифры, а вторая группа фиксирует последние две цифры первой группы. «Захваты» –

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