我想从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);
答案 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)
结尾标记(结束范围)中有斜杠(/)
你需要逃避它或使用与斜杠不同的分隔符