Как я могу написать регулярное выражение, которое соответствует не жадный?


мне нужна помощь о регулярном выражении, соответствующем не жадному варианту.

шаблон матч:

<imgs.*>

текст, чтобы соответствовать:

<html>
<img src="test">
abc
<img
  src="a" src='a' a=b>
</html>

Я тестирую на http://regexpal.com

это выражение соответствует всему тексту из <img в прошлом >. Мне нужно, чтобы он соответствовал первому встреченному > после первого <img, Так что здесь мне нужно будет получить два матча вместо того, который я получаю.

I перепробовал все комбинации нежадный ?, без успеха.

3 231

3 ответа:

не-жадный ? работает прекрасно. Просто нужно выбрать точка соответствует всем опция в движках регулярных выражений (regexpal, двигатель, который вы использовали, также имеет эту опцию)вы тестируете. Это связано с тем, что механизмы регулярных выражений обычно не соответствуют разрывам строк при использовании .. Вы должны сказать им явно, что вы хотите, чтобы соответствовать разрывы строк тоже с .

например,

<img\s.*?>

строительство ладно!

Регистрация здесь.

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

The ? операнд делает матч не жадным. Е. Г. .* жадный, а .*? нет. Так что вы можете использовать что-то вроде <img.*?> чтобы соответствовать всему тегу. Или <img[^>]*>.

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

Проверьте переполнение стека вопрос что означает ленивый и жадный в контексте регулярных выражений? как хорошо.

жадные средства соответствуют самой длинной возможной строке.

ленивый означает соответствие кратчайшие строки.

например, жадный h.+L соответствует " аду " в "привет", но ленивый h.+?l соответствует 'hel'.