我正在尝试将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
,其中li
被a
取代。
如何更换li标签而不是li的所有实例?
答案 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
使用更通用的解决方案进行了更新。