2015-05-29 6 views
0

Я только начал с регулярных выражений и столкнулся с проблемой, написав один для случая, который мне понадобится.Регулярное выражение, ошибка совпадения

Вот моя проблема. Я написал это простое регулярное выражение:

(<img).+[>] 

он соответствовал для большинства случаев, но не для случая, если что-то есть между ними. Вот изображение для вас, возможно, это объяснит мою проблему лучше: enter image description here Там вы можете видеть это очень хорошо. Он должен выбирать только области img-tag, но не «a» между ними.

Может кто-нибудь дать мне несколько советов, как я могу решить эту проблему?

+2

Можете ли вы разместить что-либо в этом образе? Разбор html/xml с регулярными выражениями обычно не работает. Проблема здесь может заключаться в том, что ваше регулярное выражение жадно в настоящее время, поэтому оно выбирает все до последнего '>'. Вам также не нужно '>' в классе символов. Также будет полезен язык, который вы используете в этом. – chris85

+0

Попробуйте это '' – Bohemian

ответ

2

Вы можете отказаться от большей части своего шаблона - большая часть его не нужна.

Попробуйте это:

<img.*?> 

С ненужных скобки удалены, важное изменение добавления ?, чтобы сделать его неохотно квантор - один, который соответствует, как мало насколько это возможно.

3

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

Чтобы не допустить, чтобы + был жадным, добавьте ? после него.

(<img).+?[>] 

Обратите внимание, что другие элементы вашего регулярного выражения, вероятно, нет необходимости, и она может быть уменьшена до:

<img.+?> 

[>] таким же, как > и () был захват группой, которую вы не использовались)

+0

благодарит за подсказки! – user3714751

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