在PHP中使用preg_replace HTML代码

时间:2013-04-09 02:24:58

标签: php regex

我想从html代码中删除下面的字符串 <span style="font-size: 0.8px; letter-spacing: -0.8px; color: #ecf6f6">3</span>

所以我提出了正则表达式。

$pattern = "/<span style=\"font-size: \\d(\\.\\d)?px; letter-spacing: -\\d(\\.\\d)?px; color: #\\w{6}\">\\w\\w?</span>/um";

然而,正则表达式不起作用。有人能指出我做错了什么。我是PHP的新手。

当我使用简单的正则表达式进行测试时,它仍可正常使用正则表达式。

  $str = $_POST["txtarea"];
  $pattern = $_POST["regex"];
  echo preg_replace($pattern, "", $str);

3 个答案:

答案 0 :(得分:0)

尽管我主张DOMDocument在这里完成这项工作,但你仍然需要一些正则表达式,所以......

px数值的表达式可以只是[\d.-]+,因为您没有尝试验证任何内容。

跨度的内容可以简化为[^<]*(即除开头括号外):

$re = '/<span style="font-size: [\d.-]+px; letter-spacing: [\d.-]+px; color: #[0-9a-f]{3,6}">[^<]*<\/span>/';

echo preg_replace($re, '', $str);

答案 1 :(得分:0)

Do not use regex for this problem。使用html解析器。这是一个使用BeautifulSoup的python解决方案,因为我喜欢这个库来完成这些任务:

from BeautifulSoup import BeautifulSoup

with open('Path/to/file', 'r') as content_file:
    content = content_file.read()

soup = BeautifulSoup(content)
for div in soup.findAll('span', {'style':re.compile("font-size: \d(\.\d)?px; letter-spacing: -\d(\.\d)?px; color: #\w{6}")}):
    div.extract()

with open('Path/to/file.modified', 'w') as output_file:
    output_file.write(str(soup))

答案 2 :(得分:0)

结尾标记(结束范围)中有斜杠(/)

你需要逃避它或使用与斜杠不同的分隔符