Регулярное выражение для замены тега <a> - PullRequest
0 голосов
/ 03 августа 2010

Я новичок в регулярных выражениях, но я пытаюсь узнать об этом.Я хочу удалить тег HTML-текст, и пусть только внутренний текст.Примерно так:

Original: Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>
Result:  Lorem ipsum Google Lorem ipsum Bing

Я использую этот код:

$patterns = array( "/(<a href=\"[a-z0-9.:_\-\/]{1,}\">)/i", "/<\/a>/i");
$replacements = array("", "");

$text = 'Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>';
$text = preg_replace($patterns,$replacements,$text);

Это работает, но я не знаю, является ли этот код более эффективным или более читаемым.

Можно ли как-нибудь улучшить код?

Ответы [ 5 ]

7 голосов
/ 03 августа 2010

В вашем случае PHP strip_tags() должен делать именно то, что вам нужно, без регулярных выражений.Если вы хотите удалить только определенный тег (что-то strip_tags() не может сделать по умолчанию), есть функция в Комментарии пользователей .

Как правило, регулярные выражения не являютсяподходит для разбора HTML.Лучше использовать синтаксический анализатор DOM, например Simple HTML DOM или один из встроенных синтаксических анализаторов PHP .

5 голосов
/ 03 августа 2010
2 голосов
/ 03 августа 2010

В этом случае использование регулярных выражений не очень хорошая идея.Сказав, что:

<?php
    $text = 'Lorem ipsum <a href="http://www.google.es">Google</a> Lorem ipsum <a href="http://www.bing.com">Bing</a>';
    $text = preg_replace(
        '@\\<a\\b[^\\>]*\\>(.*?)\\<\\/a\\b[^\\>]*\\>@',
        '\\1',
        $text
    );
    echo $text;
    // Lorem ipsum Google Lorem ipsum Bing
?>

Это очень тривиальное регулярное выражение, не пуленепробиваемое.

2 голосов
/ 03 августа 2010

Если ваш контент содержит только теги привязки, то, вероятно, проще использовать strip_tags.

Ваше preg_replace не заменится, если между a и href есть ложные пробелы, или если вбирка.

0 голосов
...