2015-08-05 6 views
-2

Мне было интересно, почему это регулярное выражение совпадает, когда это явно не должно. Ссылка на сайт вопроса: regexone.com.Почему это регулярное выражение прошло?

^(-?)(\d+)(\.|,)?(\w+)\.?(\d+)$

Task Text 
--------------------- 
Match 3.14529 
Match -255.34 
Match 128 
Match 1.9e10 
Match 123,340.00 
Skip 720p 

Регулярное выражение выше, должны быть приняты.

+0

Кажется, что если это явно не должно, на вопрос будет дан ответ: ошибка на сайте. Есть ли конкретный вопрос о том, какие из них явно не должны? –

+1

Почему вы говорите _ «это явно не должно» _? Для меня это явно должно совпадать. Как вы думаете, что неправильно с этим регулярным выражением, что заставляет вас думать, что это не должно совпадать? Показанные совпадения и пропуски верны. –

+0

Извините, неверно сформулируйте ваш вопрос. Какую линию вы считаете ошибочно оцененной? (хотя регулярное выражение больше соответствует плаванию, нет контрпримера, который мог бы победить его, например, '123A123'). – Amadan

ответ

3

Давайте оценим это регулярное выражение.

           ^(-?)(\d+)(\.|,)?(\w+)\.?(\d+)$ 
              |---||---||-----||---||-||----| 
      may or may not start with a hyphen__| |  |  | | | 
     then must contain one or more digits_______|  |  | | | 
then may or may not contain a period or comma_____________|  | | | 
then must contain one or more word characters___________________| | | 
     then may or may not contain a period_______________________| | 
      then must end in one or more digits____________________________| 

Единственная тестовая строка в вашей группе, которая не совпадает с 720p. Интересно отметить, что 1 не будет соответствовать, 0.0 не будет соответствовать или много других допустимых номеров. Таким образом, это не большое регулярное выражение для чисел, но оно работает с этими тестовыми примерами.

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