0

我想从 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);
4

3 回答 3

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);
于 2013-04-09T02:35:58.237 回答
0

不要对这个问题使用正则表达式。使用 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))
于 2013-04-09T02:36:27.230 回答
0

你的结束标签中有一个斜杠( / )(结束跨度)

您需要对其进行转义或使用与斜杠不同的分隔符

于 2014-05-26T11:02:22.677 回答