Regex для анализа заголовка сообщения - PullRequest
1 голос
/ 05 января 2010

Я использую cURL для захвата страницы и хочу разобрать заголовок поста (фактический текст, показанный по ссылке, а не атрибут заголовка <a>).

HTML выглядит так:

<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>

Я пытался использовать этот код:

preg_match('/<\a title=\".*\" rel=\"bookmark\" href=\".*\">.*<\/a>/', $page, $matches);

Но это не работает, PHP возвращает Array ( ) (пустой массив).

Может кто-нибудь предоставить мне регулярное выражение для этого? Я пробовал онлайн генераторы, но это идет прямо над моей головой. Ура! * * 1013

Ответы [ 4 ]

1 голос
/ 05 января 2010

Добавьте скобки к своему выражению:

'/<a title=".*" rel="bookmark" href=".*">(.*)<\/a>/'

Все, что находится между ( ) будет возвращено в массиве.

Edit:

Вы должны удалить все пробелы перед кавычками.

Edit2:

Как видно из документации для preg_match

Если указано matches, то оно заполняется результатами поиска. $ match [0] будет содержать текст, который соответствует полному шаблону, $ match 1 будет иметь текст, который соответствует первому захваченному заключенному в скобки подшаблону и т. д.

Вам также следует проверить выражение с примером текста, чтобы убедиться, что оно действительно выполняет то, что вы хотите.

0 голосов
/ 06 января 2010

вот еще один способ

$str = <<<A
<li class="topic">
    <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/">Title of blog post</a>
</li>
A;
$s = explode("</a>",$str);
foreach ($s as $a=>$b){
    if(strpos($b,"<a title")!==FALSE){
        $b=preg_replace("/.*<a title.*>/ms","",$b);
        print $b;
    }
}

выход

$ php test.php
Title of blog post
0 голосов
/ 06 января 2010

$str = <code>'<li class="topic"> <a title="Permanent Link to Blog Post" rel="bookmark" href="http://www.website.com/blog-post/"> Title of blog post</a> </li>; `

echo strip_tags ($ str);

Дает:

Заголовок сообщения в блоге

0 голосов
/ 05 января 2010

Предполагая, что вы хотите атрибут, вы можете использовать:

if (preg_match('/<a\s+[^>]*?\btitle="(.+?)"/', $page, $matches)) {
    echo $matches[1], "\n";
}

Синтаксический анализ HTML может быть сложным, и регулярные выражения не подходят для работы в общем случае. Для простых, вменяемых документов вы можете сойти с рук.

Просто знайте, что вы вбиваете винт с молотком.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...