通过忽略少数空格和样式在 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;
我目前在我的代码中使用 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;