通过忽略少数空格和样式在 html 字符串上开发 preg 替换

develop preg replace on a html string by ignoring few spaces and styles

我目前在我的代码中使用 preg_replace PHP 函数来排除一些 html 实体。但是当我开发代码时,我发现我在代码中使用的 regex 模式存在一些困难。

我有以下类型的 html 单位,

<div class="css-1" style="style-1:10px; style-2: 5px"> --sample 1-- </div>
<div class="css-1" style="style-1: 10px; style-2:5px">--sample 2-- </div>
<div class="css-1" style="style-1: 10px; style-2: 5px">--sample 3--</div>
<div class="css-1" style="style-1:10px; style-2:5px"> --sample 4-- </div>

结构非常相似,但我会在这里和那里留一些空格。

我尝试了以下 regex 来排除 html 实体,如果我有任何来自 regex 的匹配项。

 $regex = '/(<div class="css-1" style="style-1:10px; style-2: 5px">[\s]+\-\-\b(sample 1|sample 2|sample 3|sample 4)\b\-\-[\s]+<\/div>)/';

$html = <<<EOD
<div class="css-1" style="style-1:10px; style-2: 5px"> --sample 1-- </div>
<div class="css-1" style="style-1: 10px; style-2:5px">--sample 2-- </div>
<div class="css-1" style="style-1: 10px; style-2: 5px">--sample 3--</div>
<div class="css-1" style="style-1:10px; style-2:5px"> --sample 4-- </div>
EOD;

$clean =  preg_replace($regex, '', $html);

但是由于错误的变量空间,它没有像我预期的那样工作。我需要删除完整的 div 如果它包含示例 1、示例 2、示例 3 或示例 4 之一。如果我可以忽略样式和空格会更好。

例如:

<div>--sample 1--</div>

类似于

<div class="css-1" style="style-1:10px; style-2: 5px"> --sample 1-- </div>

说到regex.

我不擅长这个regex而且我仍然找不到如何忽略这些变量空间。

请帮我解决这个问题。

提前致谢。

这里我使用 * 来匹配模式需要的零个或多个空格。
sample [1234]{1} 只会匹配其中一个,所以 14 是安全的。

$re = '/<div\s+class=\"css\-1\"\s+style=\"style-1:\s*10px;\s+style-2:\s*5px\">.*?sample\s*[1|2|3|4]{1}--\s*<\/div>/';
$str = '<div class="css-1" style="style-1:10px; style-2: 5px"> --sample 1-- </div>
<div class="css-1" style="style-1: 10px; style-2:5px">--sample 2-- </div>
<div class="css-1" style="style-1: 10px; style-2: 5px">--sample 3--</div>
<div class="css-1" style="style-1:10px; style-2:5px"> --sample 4-- </div>
<div class="css-1" style="style-1:10px; style-2:5px"> --sample 14-- </div>';
$subst = '';

$result = preg_replace($re, $subst, $str);

echo $result;

https://3v4l.org/Q2m7l