2016-12-01 6 views
1

У меня есть следующие строки Я пытаюсь соответствовать наRegex матч между паттернами или конца строки

1234 foo bar 
123 foo bar dr 

Вот мой рисунок

(?!\d)(\w.*)(?=\s(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|cir|trl|trail|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw+))/i 

Я не могу показаться, чтобы выяснить, как матч " foo bar ", когда у него нет соответствующего окончания, такого как" dr ". Я попытался реализации $ в нескольких местах без удачи

+0

Вы уверены, что ваш шаблон каким-то образом соответствует введенным строкам? – RomanPerekhrest

+0

обновил мой вопрос –

ответ

1

Один из способов будет использовать дополнительный предпросмотр:

(?!\d)(\w.*) 
(?=\s(court|ct|street|st|drive|dr|lane|ln|road|rd|blvd|cir|trl|trail|crossing|xing|pl|place|ave|cv|cove|trce|trace|mnr|way|loop|bnd|bend|lndg|landing|path|pkwy|parkway|pass|rdg|ridge|vw+)?) 

Здесь вы всегда можете использовать группу один, см a demo on regex101 (и виду разные модификаторы!).

+0

Как я могу избежать соответствия части «dr». Мне нужно только «foo bar» –

+0

@JohnLang: Обновлено. – Jan

+0

@Jan: Я думаю, вы также можете избежать * захвата * его. Используйте группу non-capture в lookahead. –

0

Используйте негативный взгляд вперед для типов уличных над точкой:

(?<=\d)((?!\s(court|ct|street|st|drive|dr|<ETC>|vw)).)* 

См live demo.

Весь матч (группа 0) - ваш целевой вход.

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