我在$ body中有一个字符串,如下所示:
<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>
我想使用以下内容替换令牌[COMMENT2]中的单词“None”:
$body = preg_replace('\[.*\]', 'None', $body);
我错过了什么?
答案 0 :(得分:3)
试试这个:
$body = '<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>';
echo $body = preg_replace('/\[[^]]+\]/', 'None', $body);
//=> <td style="vertical-align: top; border: 1px solid gray;">None</td>
答案 1 :(得分:1)
您应该在您的正则表达式中添加分隔符/
或~
,例如/\[.*\]/
Php代码
<?php
$body='<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>';
$body = preg_replace('/\[.*?\]/', 'None', $body);
echo $body;
?>
输出
<td style="vertical-align: top; border: 1px solid gray;">None</td>
的 Ideone Demo 强>
的 Regex101 Demo 强>
答案 2 :(得分:1)
我可以建议另一种方法(使用Parser
,即)?
<?php
$html = '<html>
<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>
</html>';
$xml = simplexml_load_string($html);
// run an xpath query on the dom
foreach ($xml->xpath("//td[text()='[COMMENT2]']") as &$td)
$td[0] = 'Some other text';
// just to make sure the html has indeed been changed
echo $xml->asXML();
?>
答案 3 :(得分:0)
我建议使用这个简单的正则表达式:
如果您要替换[...]
$body = preg_replace('%[^>]+(?=</td>)%i', 'None', $body);
如果[
和]
$body = preg_replace('%(?<=\[)[^>]+(?=\]</td>)%i', 'None', $body);
基于输入文字
<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>
它会产生
<td style="vertical-align: top; border: 1px solid gray;">None</td>