如何在PHP中剪切此字符串?

时间:2013-04-22 12:15:23

标签: php regex expression

我目前正在制作一个用于存档图像板的脚本。 我有点坚持正确地引用链接,所以我可以使用一些帮助。

我收到这个字符串:

<a href="10028949#p10028949" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???

在上述字符串中,我需要改变这一部分:

<a href="10028949#p10028949"

成为这个:

<a href="#p10028949"

使用PHP。

此部分可能会在字符串中出现多次,或者可能根本不出现。 如果你有一个我可以用于此目的的代码片段,我真的很感激。

提前致谢! 肯尼

3 个答案:

答案 0 :(得分:0)

免责声明:正如评论中所说,使用DOM解析器更好地解析HTML。

话虽如此:

"/(<a[^>]*?href=")\d+(#[^"]+")/"

替换为$1$2

因此...

$myString = preg_replace("/(<a[^>]*?href=\")\d+(#[^\"]+\")/", "$1$2", $myString);

答案 1 :(得分:0)

试试这个

<a href="<?php echo strstr($str, '#')?>" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???

答案 2 :(得分:0)

虽然你已经回答了这个问题,但我邀请你看看(大约xD)是正确的方法,用DOM解析它:

$string = '<a href="10028949#p10028949" class="quotelink">&gt;&gt;10028949</a><br><br>who that guy???';

$dom = new DOMDocument();
$dom->loadHTML($string);

$links = $dom->getElementsByTagName('a'); // This stores all the links in an array (actually a nodeList Object)

foreach($links as $link){
    $href = $link->getAttribute('href'); //getting the href

    $cut = strpos($href, '#');
    $new_href =  substr($href, $cut); //cutting the string by the #

    $link->setAttribute('href', $new_href); //setting the good href
}

$body = $dom->getElementsByTagName('body')->item(0); //selecting everything

$output = $dom->saveHTML($body); //passing it into a string

echo $output;

这样做的好处是:

  • 更有条理/更清洁
  • 其他人更容易阅读
  • 例如,您可以使用混合链接,而您只想修改其中的一些链接。使用Dom,您实际上只能选择某些类
  • 您也可以更改其他属性,或者更改所选标签的兄弟姐妹,父母,孩子等......

当然你也可以用正则表达式获得最后2分,但这将是一个完整的混乱......