php якорный тег регулярное выражение - PullRequest
1 голос
/ 28 ноября 2009

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

строка, например.

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. Как я могу разобрать весь якорный тег / ссылку из строки?

спасибо!

Ответы [ 5 ]

1 голос
/ 28 ноября 2009

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

0 голосов
/ 29 ноября 2009
$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!"
0 голосов
/ 28 ноября 2009

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

$str = preg_replace('#\s?<a.*/a>#', '', $str);
0 голосов
/ 28 ноября 2009

просто используйте ваши обычные строковые функции 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!
0 голосов
/ 28 ноября 2009

Вы не должны использовать regex для анализа html и использовать вместо него html-анализатор.

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

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

...