регулярное выражение тега привязки php
Вопрос
У меня есть куча строк, каждая из которых содержит тег привязки и 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!"