2017-02-15 4 views
1

У меня есть текст:REGEX: не работает D

Wheels – F/R_ Schwalbe TABLE TOP/Schwalbe Black Jack 26x2.2

И регулярное выражение для разбора размер колеса из этой строки:

/.*Wheels.*(\d*)x/ 

Но это не работает. Кроме того, когда я удаляю звездочку из regex, я получаю номер 6 как групповое совпадение.

+1

'. * Wheels. *? (\ d *) x' –

+0

@PavneetSingh, работая, но не могли бы вы объяснить, где была моя ошибка, и отформатировать это как ответ, поэтому я могу принять его. – Src

+0

Чтобы уточнить, вы хотите выбрать «Колеса» из строки и ничего больше? –

ответ

2

Вы должны сделать свое регулярное выражение не жадным, потому что .* будет потреблять ваши цифры и \d* означает ноль или не матч

.*Wheels.*?(\d*)x 

.*? означает матч, как много символов, как несколько раз, как это возможно, чтобы остановить .* потреблять ваш цифры

Follow this Demo for example


lternately вы можете сделать его более эффективным, если нет знаков после Wheel и ваши желаемых значений со следующим регулярным выражением

.*Wheels[^\d]*(\d*)x

где [^\d]* среднее соответствует ничего, кроме цифр

+1

Спасибо за объяснение! – Src

+0

@Src Я рад, что могу помочь, счастливое кодирование –

3

Вы должны сделать свой .* перед цифрами lazy instead of greedy:

/.*Wheels.*?(\d*)x/ 

.* будет жадно поглощать все до x, не оставляя ничего для следующего \d*. Так как * может корректно соответствовать нулевым символам, то неправильное совпадение для \d*.

Добавляя ? сделать ленивую .*? выражения, он будет пытаться матч, как несколько символов, как это возможно, что позволяет следующие \d*, чтобы соответствовать всем номерам перед x.

+0

Спасибо за объяснение! – Src