Вообщем стоит такая задача. Нужно написать регулярное выражение. Текст: <td class='lol'><a href="http://lol.ru">Hello</a></td> Результат должен быть список (группы как угодно): 1. <td class='lol'> 2. <a href="http://lol.ru"> 3. Hello 4. </a> 5. </td> Regex: <\/?.*?> показывает только открытые и закрытые теги. Обычный текст не получается сделать. UPD: <\/?.*?>|[^><]+ - работает но может есть лучше вариант? P.s Понятное дело можно обойтись и без регулярных, смысл разобраться.
Code: (\<td class\=\\\'lol\\\'\>)(\<a href\=\"(.+)\"\>)(.+)(\<\/a\>)(\<\/td\>) Можно и на асме писать) Без регулярок жизнь боль.
странноватый кейс... можно так сделать Code: ~$ cat reg.pl $a = '<td class=\'lol\'><a href="http://lol.ru">Hello</a></td>'; print "$1\n$2\n$3\n$4\n$5\n" if($a=~m!(<[^>]+>)(<a\shref[^>]+>)([\w]+)(</[^>]+>)(</[^>]+>)!); ~$ perl reg.pl <td class='lol'> <a href="http://lol.ru"> Hello </a> </td>
Такой регулярки не существует и существовать не может. Парсинг html/xml - это сложный процесс выполнить который всего лишь одной регуляркой невозможно. Если тебе нужен доступ к структуре кривого HTML то используй DOM-парсеры. Самый лучший DOM-парсер это браузер. Если нужна обработка документа в потоке то используй SAX-парсеры, правда они работают только с xml-документами правильной структуры.