сопоставлять теги изображений с regEx - PullRequest
1 голос
/ 06 мая 2009

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

<img(.+)src="_image/([0-9]*)/(.+)/> 

Включены глобальные и нечувствительные к регистру флаги.

Проблема в том, что он также захватывает изображение n (см. Строку ниже), но я хочу, чтобы оно совпадало только с тегами изображения в строке.

<p>Image 1:<img width="199" src="_image/12/label" alt=""/> Image 2: <img width="199" src="_image/12/label" alt=""/><img width="199" src="_image/12/label" alt=""/></p>

Это работает, если я ставлю новую строку перед Image n:)

Может ли кто-нибудь указать мне, что я делаю неправильно?

Заранее спасибо боб

Ответы [ 5 ]

1 голос
/ 07 мая 2009

Если я правильно интерпретирую ваше регулярное выражение, похоже, что вы после имени каталога в первой группе и пути к файлу во второй группе?

<IMG.*?SRC="/_image/(\d+?)/([^"]*?)".*?/>

Не забудьте использовать параметры регулярного выражения CaseInsensitive, который оборачивает регулярное выражение в (? I: [regex])

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

Кроме того, не забудьте закрыть строку SRC, которую вы пропустили, и что атрибут SRC может быть не последним в теге - например, граница, ширина, высота и т. Д. Кроме того, может быть любое число пробелов после закрытия последнего атрибута и конца тега />

Из этого регулярного выражения ваша первая группа совпадений будет содержать имя подкаталога, а вторая группа совпадений будет содержать все после / подкаталога, включая вложенные подкаталоги. Если у вас есть вложенные подкаталоги, вам может потребоваться немного расширить это:

<IMG.*?SRC="/_image/((\d+?)/)+?([^"]*?)".*?/>

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

1 голос
/ 06 мая 2009

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

image? SRC = "_ изображение / (\ d +) / (. +?) /.?>

0 голосов
/ 07 мая 2009

Вы используете жадный квантификатор (+) без особых ограничений. Жадный квантификатор говорит движку регулярных выражений: «Хватайте каждого подходящего персонажа и отступайте только на столько, чтобы завершить регулярное выражение». Это означает, что он получит из первой последовательности символов «image / nnnnnn / что-то /».

0 голосов
/ 07 мая 2009

Регулярные выражения в принципе плохо разбирают HTML (см. . Можете ли вы привести некоторые примеры того, почему трудно анализировать XML и HTML с регулярным выражением? , почему). Что вам нужно, это HTML-парсер. См. Можете ли вы привести пример разбора HTML с вашим любимым парсером? для примеров использования различных парсеров.

0 голосов
/ 06 мая 2009

Вы пробовали ленивую оценку? Это сработало некоторое время назад, когда я попробовал нечто подобное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...