我一直在寻找答案,但我找不到。
我想从包含html的字符串中删除类b-c
和e
。
$tmp = '<div class="a b-c d e">b-c</div>';
$tmp2 = '<div class="a b-c d">b-c</div>';
$tmp3 = '<div class="a e b-c d">b-c</div>';
$tmp4 = '<div class="a d e">b-c</div>';
我试过像这样的事情
preg_replace('#class="(.*?)(b-c|e)(.*?)"#si', 'class="\\1\\3"', $a)
但它并不适用于所有情况(不适用于$tmp
和$tmp2
)。
正则表达式$tmp
后,$tmp2
,$tmp3
,$tmp4
应该
<div class="a d">b-c</div>
我希望这个正则表达式将删除所有类中的所有类,无论有多少类,无论顺序如何 anyony可以帮帮我吗?我在正则表达式中表现不佳:/
答案 0 :(得分:2)
如果你想使用正则表达式(但总是更好地使用DOM解析器),你可以通过这种方式实现目标:
<?php
$tmp = '<div class="a b-c d e">b-c</div>';
$tmp2 = '<div class="a b-c d">b-c</div>';
$tmp3 = '<div class="a e b-c d">b-c</div>';
$tmp4 = '<div class="a d e">b-c</div>';
function remove($tmp) {
return preg_replace_callback('/class="([^"]+)"/', function($m) {
if(strpos($m[1], "b-c") !== false) {
$m[0] = preg_replace("/\s*b-c\s*/",' ',$m[0],1);
}
if(strpos($m[1],"e") !== false) {
$m[0] = preg_replace("/\s*e\s*/",' ',$m[0], 1);
}
return $m[0];
}, $tmp);
}
echo remove($tmp), "\n", remove($tmp2), "\n", remove($tmp3), "\n" , remove($tmp4);
输出:
<div class="a d ">b-c</div>
<div class="a d">b-c</div>
<div class="a d">b-c</div>
<div class="a d ">b-c</div>
不完美(有一个尾随空格)但效果很好(类属性允许使用空格)。
我希望它有所帮助
答案 1 :(得分:0)
您可以使用str_replace
str_replace(" b-c ", " ", $tmp); // This will replace b-c if it is not the first or last class
str_replace("b-c ", " ", $tmp); // This will replace b-c if it is the first class
str_replace(" b-c", " ", $tmp); // This will replace b-c if it is the last class
str_replace('"b-c"', '""', $tmp); // This will replace b-c if it is the only class and the quotes for the class HTML property are double quotes
此代码不会删除b-c
中的<div>b-c</div>
,因为它会在
b-c