Regex для получения значений атрибута тега HTML
У меня есть следующая строка с <img src="some value"
шаблон является фиксированным, т.е.
- Начинается с
<img
- Там будет один пробел
- затем
src=
- некоторые символы в двойных кавычках
Таким образом, я хочу получить значение в двойных кавычках, которые доступны в шаблоне, упомянутом выше. Я не хочу разбирать весь HTML.
<p>
<img src="http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpg" style="width: 25%;">
<img src="http://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg" style="width: 25%; float: none;" class="img-thumbnail">sdklfnlkasndfknasd
<img src="415b4579babd4f288ae84c372cd1669e.jpg" style="width: 25%;">f
</p>
<p>adsffasd</p>
<p>ff</p>
<p><br></p>
<p><br></p>
<p>adsadf</p>
<p>s</p>
Я хочу получить все значения из src
атрибут только тегов img. src
Тег может иметь любое значение, не обязательно быть URL. Это может быть просто имя файла. Результат матчей должен быть:
http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpg
http://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg
415b4579babd4f288ae84c372cd1669e.jpg
Я пробовал следующий код:
string regex = "<img src=([\"'])(?:(?=(\\\\?))\\2.)*?\\1";
string html = File.ReadAllText(@"data.txt");
var hrefmatches = Regex.Matches(html, regex);
И результат:
<img src="http://www.nkb.com/Images/598e97fa05454766902650b4c01d7645.jpg"
<img src="http://www.nkb.com/Images/1ec31c56d06040489e9832f98852d8ce.jpg"
<img src="415b4579babd4f288ae84c372cd1669e.jpg"
но я не <img src="
& "
участие в результатах
2 ответа
Если вы используете C#, правильный способ сделать это - использовать анализатор HTML (например, пакет agility HTML) для анализа вашего HTML. Парсинг HTML с помощью REGEX сложен, подвержен ошибкам, и если вы подпишетесь на групповое мышление в Stackru, то демоны выйдут из ада.
Узнайте больше: http://www.mikesdotnetting.com/article/273/using-the-htmlagilitypack-to-parse-html-in-asp-net
Самое простое решение, учитывая ваш точный вклад в вопрос, - это просто полностью игнорировать тот факт, что html участвует каким-либо образом, и просто искать что-либо, а затем буквальное src="
и затем любой символ не кавычка внутри, а затем буквальная кавычка, а затем любая последующая вещь.
используя только ваш пример выше, это супер наивное регулярное выражение должно работать:
string regex = ".*src="([^"]*)".*";
но для чего-то более сложного вы должны использовать html-парсер.