Сегодня я писал регулярное выражение для распарсивания подобного HTML-кода:
<div class="post" id="post-88">
<div class="posttitle">
<h2><a href="/index.html2007/10/02/how-we-met/" rel="bookmark" title="Permanent Link to How we met">How we met</a></h2>
<p class="post-info">Oct 2nd, 2007 by <a href="/index.htmlauthor/stellakevlar/" title="Posts by Stella Kevlar">Stella Kevlar</a> </p>
</div>
<div class="entry">
<div class='snap_preview'><p>Wordpress has a great little feature ...</p></div>
</div>
<p class="postmetadata">Posted in <a href="http://wordpress.com/tag/stella-kevlar" title="View all posts in Stella Kevlar" rel="category tag">
Stella Kevlar</a> | <a href="/index.html2007/10/02/how-we-met/#comments" title="Comment on How we met">2 Comments ></a></p>
</div>
<div class="post" id="post-85">
<div class="posttitle">
<h2><a href="/index.html2007/09/30/manual-anthropology-sounds-intriguing-right/" rel="bookmark" title="Permanent Link to Manual
anthropology (sounds intriguing, right?)">Manual anthropology (sounds intriguing, right?)</a></h2>
<p class="post-info">Sep 30th, 2007 by <a href="/index.htmlauthor/stellakevlar/" title="Posts by Stella Kevlar">Stella Kevlar</a>
</p>
</div>
<div class="entry">
<div class='snap_preview'><p>Meet my dad, Professor Kevlar. ...</p></div>
</div>
<p class="postmetadata">Posted in <a href="http://wordpress.com/tag/stella-kevlar" title="View all posts in Stella Kevlar" rel="category tag">
Stella Kevlar</a> | Tagged <a href="http://wordpress.com/tag/anorexia" rel="tag">anorexia</a>, <a href="http://wordpress.com/tag/cars" rel="tag">cars
</a>, <a href="http://wordpress.com/tag/cyborg" rel="tag">cyborg</a>, <a href="http://wordpress.com/tag/dad" rel="tag">dad</a>,
<a href="http://wordpress.com/tag/manual-transmission" rel="tag">manual transmission</a>, <a href="http://wordpress.com/tag/new-beetle" rel="tag">
new beetle</a>, <a href="http://wordpress.com/tag/stick" rel="tag">stick</a> |
<a href="/index.html2007/09/30/manual-anthropology-sounds-intriguing-right/#comments" title="Comment on Manual anthropology (sounds intriguing,
right?)">8 Comments ></a></p>
</div>
Здесь приведено два куска, один условно под именем "How we met" и другой "Manual anthropology (sounds intriguing, right?)". Вот эти тайтлы мне и нужно было вытащить. Для этого я написал такой регулярный выражение:
/rel="bookmark" title="Permanent Link to ([^\")]*)">/is
Как вы наверное поняли, частичка ([^\")]*) обозначает, что будет включаться все, кроме символа двойной кавычки.
И вот что удивительно!
Для первого поста регулярное выражение отлично срабатывает и находит текст "How we met". Во втором же посте я обнаружил заминку - там в одном месте вместо стандартного пробела стоит код - и регулярное выражение не срабатывает! Вполне очевидно, что из-за этого. Подскажите, чем оно ему мешает? И как сделать, чтобы не мешало?
П.с. я не программист, я только учусь..
п.п.с рег.выражения тестировал на http://gskinner.com/RegExr/ - рекомендую!
Спустя 33 минуты, 32 секунды (28.03.2011 - 00:02) Trianon написал(а):
судя по приведенному фрагменту у Вас там банальный перевод строки - был бы виден явно.
В режиме PREG_MULTILINE такой текст обработан, вероятно, не будет.
В режиме PREG_MULTILINE такой текст обработан, вероятно, не будет.
Спустя 9 часов, 1 минута, 11 секунд (28.03.2011 - 09:03) ivan22 написал(а):
Спасибо за ответ! Это наводит на кое-какие размышления. Действительно, в приведенном фрагменте выглядит так, как будто там перевод строки. Но самого перевода строки нет! Вот скриншот из Notepad++ со включенным отображением непечатаемых символов:

Как видно, переводов строки внутри искомого фрагмента нет.
Но теперь я попробовал подойти от обратного. Используя средство тестирования выражения, я прошелся по всему фрагменту и поочередно удалял символ за символом, пока выражение не сработало. Оказалось, что не срабатывает из-за символа ")" - закрытия скобки!
Вот так не срабатывает:
А вот так срабатывает: (без скобки)

Как видно, переводов строки внутри искомого фрагмента нет.
Но теперь я попробовал подойти от обратного. Используя средство тестирования выражения, я прошелся по всему фрагменту и поочередно удалял символ за символом, пока выражение не сработало. Оказалось, что не срабатывает из-за символа ")" - закрытия скобки!
Вот так не срабатывает:
<h2><a href="/index.html2007/09/30/manual-anthropology-sounds-intriguing-right/" rel="bookmark" title="Permanent Link to Manual
anthropology (sounds intriguing, right?)">Manual anthropology (sounds intriguing, right?)</a></h2>
А вот так срабатывает: (без скобки)
<h2><a href="/index.html2007/09/30/manual-anthropology-sounds-intriguing-right/" rel="bookmark" title="Permanent Link to ManualПочему бы это? Подскажите, пожалуйста.
anthropology (sounds intriguing, right?">Manual anthropology (sounds intriguing, right?)</a></h2>
Спустя 5 часов, 34 минуты, 58 секунд (28.03.2011 - 14:38) Ulan написал(а):
потому что ты включил в инвертированный символьный класс скобку ([^\")]*)
Спустя 9 часов, 36 минут, 27 секунд (29.03.2011 - 00:15) Trianon написал(а):
ivan22
а и вправду зачем скобку-то рядом с кавычкой?
а и вправду зачем скобку-то рядом с кавычкой?
Спустя 2 дня, 19 часов, 52 минуты, 29 секунд (1.04.2011 - 20:07) ivan22 написал(а):
Вы правы! Спасибо большое! Тему закрываю.