Регулярное выражение для извлечения атрибута src из тега img - PullRequest
12 голосов
/ 16 января 2009

Я пытаюсь написать шаблон для извлечения пути для файлов, найденных в тегах img в HTML.

String string = "<img src=\"file:/C:/Documents and Settings/elundqvist/My Documents/My Pictures/import dialog step 1.JPG\" border=\"0\" />";

Мой рисунок:

src\\s*=\\s*\"(.+)\"

Проблема в том, что мой шаблон также будет содержать часть 'border = "0" тега img.

Какой шаблон будет соответствовать пути URI для этого файла без включения 'border = "0"?

Ответы [ 6 ]

31 голосов
/ 16 января 2009

Ваш шаблон должен быть (без выхода):

src\s*=\s*"(.+?)"

Важной частью является добавленный знак вопроса, который соответствует группе как можно меньше раз

8 голосов
/ 22 февраля 2014

Этот захват только src, только если он внутри тега, а не когда он записан где-либо еще в виде простого текста. Он также проверяет, добавили ли вы другие атрибуты до или после атрибута src.

Кроме того, он определяет, используете ли вы одинарные (') или двойные (") кавычки.

\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>

Так что для PHP вы бы сделали:

preg_match("/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/", $string, $matches);
echo "$matches[1]";

для JavaScript вы бы сделали:

var match = text.match(/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/)
alert(match[1]);

Надеюсь, это поможет.

8 голосов
/ 16 января 2009

Попробуйте это выражение:

src\s*=\s*"([^"]+)"
1 голос
/ 16 января 2009

Я пытаюсь написать шаблон для извлечения пути для файлов, найденных в тегах img в HTML.

Можем ли мы иметь автоответчик для "Не использовать регулярные выражения для анализа [X] HTML"?

Проблема в том, что мой шаблон также будет содержать часть 'border = "0" тега img.

Не говоря уже о том, что src = "'появляется в виде простого текста!

Если вы заранее знаете точный формат HTML, который вы собираетесь анализировать (например, потому что вы сгенерировали его самостоятельно), вы можете сойти с рук. Но в остальном, регулярное выражение совершенно не подходит для работы.

0 голосов
/ 04 марта 2016

Я хотел бы расширить эту тему, так как обычно атрибут src не заключен в кавычки, поэтому регулярное выражение для взятия атрибута src в кавычках и в кавычках:
src\s*=\s*"?(.+?)["|\s]

0 голосов
/ 16 января 2009

Вы хотите играть с жадной формой захвата группы. Что-то вроде

src\\s*=\\s*\"(.+)?\"

По умолчанию регулярное выражение будет стараться и максимально соответствовать

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