PHP字符串替换第一次和最后一次出现

时间:2017-07-06 14:35:21

标签: php html

我正在尝试将li标记替换为a标记,但我也会替换字符串中使用的其他li

例如我有这个:

<li id="item" class="list-item" href="#">Item</li>

但是我想替换li标签而不替换list-item类名称。

如果我这样做:

$f = array( '><a', 'li' );
$r = array( '', 'a' );
// output the menu
echo str_replace( $f, $r, $menu );

然后,班级名称list-item变为ast-item,其中lia取代。

如何更换li标签而不是li的所有实例?

4 个答案:

答案 0 :(得分:1)

试试这个

$input_lines = '<li id="item" class="list-item" href="#">Item</li>';
preg_replace("/\<(\/?)li([^\>]*)\>/", "<$1a$2>", $input_lines);

答案 1 :(得分:1)

您可以尝试使搜索参数更加准确,以避免出现此问题。例如:

$menu = "<li id=\"item\" class=\"list-item\" href=\"#\">Item</li>";
$f = array( '<li', '</li>' );
$r = array( '<a', '</a>' );
// output the menu
$x = str_replace( $f, $r, $menu );

一般来说,您应该避免使用正则表达式解析HTML。

答案 2 :(得分:0)

尝试这样的事情:

$string = '<li id="item" class="list-item" href="#">Item</li>';    
$string = preg_replace("/<li\s(.+?)>(.+?)<\/li>/is", "<a $1>$2</a>", $string);    
echo($string);

答案 3 :(得分:0)

如果你想完全按照问题陈述。 第一个和最后一个
然后你可以用strpos找到第一个。
并使用strrpos找到最后一个。

这更能说明问题的确切答案,而不是一个好方法 正如我在上面的评论中链接的那样str_replace更好。

$s = '<url id="item" class="list-item" href="#">Item</url>';
$find = "url";
$lenght = strlen($find);
$pos1 = strpos($s, $find);
$pos2 = strrpos($s, $find);

Echo substr($s,0,$pos1) . "a" . Substr($s,$pos1+$lenght,$pos2-$lenght-1) . "a" . Substr($s,$pos2+$lenght); 

请注意,我根据是否要保留或删除单词来增加或减少位置 https://3v4l.org/J1Na0

使用更通用的解决方案进行了更新。