如何使用PHP preg_replace替换令牌

时间:2016-03-23 21:37:03

标签: php regex

我在$ body中有一个字符串,如下所示:

<td style="vertical-align: top; border: 1px solid gray;">[COMMENT2]</td>

我想使用以下内容替换令牌[COMMENT2]中的单词“None”:

$body = preg_replace('\[.*\]', 'None', $body);

我错过了什么?

4 个答案:

答案 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>

RegEx Demo

PHP Demo

答案 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

More about Php delimiters here.

答案 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();
?>

参见 a working demo on ideone.com

答案 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>