Вопрос

У меня есть куча строк, каждая из которых содержит тег привязки и URL.

строка ex.

here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!

я хочу разобрать теги привязки и все, что между ними.

результат напр.

here is a link. enjoy!

однако URL-адреса в части href= не всегда соответствуют тексту ссылки (иногда встречаются сокращенные URL-адреса, иногда просто описательный текст).

мне чрезвычайно трудно понять, как это сделать с помощью регулярных выражений или функций php.как я могу разобрать весь тег привязки / ссылку целиком из строки?

Спасибо!

Это было полезно?

Решение

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

Но если вы должны использовать регулярное выражение, и внутреннее содержимое ваших тегов привязки гарантированно не содержит html, например </a>, и каждая строка гарантированно содержит только один тег привязки, как в примере, тогда - только тогда - вы можете использовать что-то вроде:

Замена /^(.+)<a.+<\/a>(.+)$/ с $1$2

Другие советы

Глядя на ваш пример с результатом, кажется, что вы просто удаляете теги / содержимое - вы хотели сохранить то, что удалили, или нет?Если нет, то вы, возможно, ищете strip_tags().

Поскольку ваша проблема кажется очень специфичной, я думаю, что это должно сработать:

$str = preg_replace('#\s?<a.*/a>#', '', $str);

просто используйте свои обычные строковые функции PHP.

$str='here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$s = explode("</a>",$str);
foreach($s as $a=>$b){
    if( strpos( $b ,"href")!==FALSE ){
        $m=strpos("$b","<a");
        echo substr($b,0,$m);
    }
}   
print end($s);

выходной сигнал

$ php test.php
here is a link . enjoy!
$string = 'here is a link <a href="http://www.google.com">http://www.google.com</a>. enjoy!';
$text = strip_tags($string);
echo $text; //Outputs "here is a link . enjoy!"
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top