[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: У меня   стопорит регулярное выражение!
ivan22
Здравствуйте!
Сегодня я писал регулярное выражение для распарсивания подобного 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". Во втором же посте я обнаружил заминку - там в одном месте вместо стандартного пробела стоит код &nbsp; - и регулярное выражение не срабатывает! Вполне очевидно, что из-за этого. Подскажите, чем оно ему мешает? И как сделать, чтобы не мешало?

П.с. я не программист, я только учусь..
п.п.с рег.выражения тестировал на http://gskinner.com/RegExr/ - рекомендую!



Спустя 33 минуты, 32 секунды (28.03.2011 - 00:02) Trianon написал(а):
судя по приведенному фрагменту у Вас там банальный перевод строки - &nbsp; был бы виден явно.

В режиме PREG_MULTILINE такой текст обработан, вероятно, не будет.

Спустя 9 часов, 1 минута, 11 секунд (28.03.2011 - 09:03) ivan22 написал(а):
Спасибо за ответ! Это наводит на кое-какие размышления. Действительно, в приведенном фрагменте выглядит так, как будто там перевод строки. Но самого перевода строки нет! Вот скриншот из Notepad++ со включенным отображением непечатаемых символов:

user posted image

Как видно, переводов строки внутри искомого фрагмента нет.

Но теперь я попробовал подойти от обратного. Используя средство тестирования выражения, я прошелся по всему фрагменту и поочередно удалял символ за символом, пока выражение не сработало. Оказалось, что не срабатывает из-за символа ")" - закрытия скобки!
Вот так не срабатывает:
<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 написал(а):
Вы правы! Спасибо большое! Тему закрываю.
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.