2015-02-23 3 views
0

может ли кто-нибудь сказать мне, как сопоставить самые близкие шаблоны между двумя точками. например, у меня есть строка «Привет. Привет, как вы». Скажем, я хочу извлечь предложение, включая «есть». так что я написал регулярное выражение ". (. +? are. +? \.)". Тем не менее, я могу получить только «Привет, как дела». вместо «Как вы». Может ли кто-нибудь помочь решить проблему? Большое спасибо.регулярное выражение для соответствия последнему вхождению с конкретными строками

ответ

1

. (метасимвол) содержит . (символ). Вы можете получить нужный результат, за исключением . характера, как так:

\.[^.]*?are[^.]*?\. 

Regex101 example

Или (?<=\.)[^.]*?are[^.]*?\. или \.\K[^.]*?are[^.]*?\. в PCRE, если вы хотите, чтобы исключить первый период с матча.

+1

Это работает. Большое спасибо. Кстати, не могли бы вы рассказать мне разницу между «[^.] *?» и ". +?" – user4598881

+0

Добро пожаловать. '.' соответствует одному символу, который не является символом новой строки. '[^.]' соответствует одному символу, который не является периодом. '+' означает * "один или несколько раз" *, тогда как '*' означает * "ноль или более раз" *. '' 'Делает квантор неровным. Поэтому '. +?' Означает * "один или несколько символов (как можно меньше), которые не содержат новую строку" * "и" [^.] *? 'Означает *" ноль или более символов (как можно меньше), которые не содержат периода «*. –

+0

Привет @ user4598881 если этот ответ решил ваш вопрос, пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/q/5234/179419), нажав галочку. Это указывает более широкому сообществу, что вы нашли решение и дали некоторую репутацию как самому, так и самому себе :) (Это не обязательство!) –

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