Ответ 1
Ваш шаблон должен быть (неэкранирован):
src\s*=\s*"(.+?)"
Важной частью является добавленный знак вопроса, который соответствует группе как можно меньше раз
Я пытаюсь написать шаблон для извлечения пути для файлов, найденных в тегах img в HTML.
String string = "<img src=\"file:/C:/Documents and Settings/elundqvist/My Documents/My Pictures/import dialog step 1.JPG\" border=\"0\" />";
My Pattern:
src\\s*=\\s*\"(.+)\"
Проблема в том, что мой паттерн также будет включать в себя 'border = "0" часть тега img.
Какой шаблон будет соответствовать пути URI для этого файла без включения 'border = "0"?
Ваш шаблон должен быть (неэкранирован):
src\s*=\s*"(.+?)"
Важной частью является добавленный знак вопроса, который соответствует группе как можно меньше раз
Попробуйте следующее выражение:
src\s*=\s*"([^"]+)"
Этот только захватывает src только в том случае, если он находится внутри тега, а не когда он написан где-либо еще как обычный текст. Он также проверяет, добавили ли вы другие атрибуты до или после атрибута src.
Кроме того, он определяет, используете ли вы одиночные (') или двойные (") кавычки.
\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>
Итак, для PHP вы бы сделали:
preg_match("/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/", $string, $matches);
echo "$matches[1]";
для JavaScript, который вы бы сделали:
var match = text.match(/\<img.+src\=(?:\"|\')(.+?)(?:\"|\')(?:.+?)\>/)
alert(match[1]);
Надеюсь, это поможет.
Я решил это с помощью этого регулярного выражения.
/<img.*?src="(.*?)"/g
Утверждено в https://regex101.com/r/aVBUOo/1
Я пытаюсь написать шаблон для извлечения пути для файлов, найденных в тегах img в HTML.
Можем ли мы иметь автоответчик для "Не использовать регулярное выражение для синтаксического анализа [X] HTML"?
Проблема в том, что мой паттерн также будет включать в себя 'border = "0" часть тега img.
Не говоря уже о каком-либо времени 'src="' появляется в виде обычного текста!
Если вы заранее знаете точный формат HTML, который вы собираетесь разбирать (например, потому что вы его создали сами), вы можете с ним справиться. Но в противном случае регулярное выражение является совсем неправильным инструментом для работы.
Вы хотите играть с жадной формой группового захвата. Что-то вроде
src\\s*=\\s*\"(.+)?\"
По умолчанию регулярное выражение будет пытаться как можно больше совместить
Я хотел бы расширить эту тему, так как обычно атрибут src
приходит без кавычек, поэтому регулярное выражение для использования цитируемого и некотируемого атрибута src
: src\s*=\s*"?(.+?)["|\s]