1

从变量中,我想删除双方括号 [[ ]] 以及介于两者之间的所有内容,然后将其替换为插入的 img

我有以下列结果:

<p>hey</p><p>[[{"type":"media","view_mode":"media_large","fid":"67","attributes":{"alt":"","class":"media-image","height":"125","typeof":"foaf:Image","width":"125"}}]]</p>

替换后变量应该变成:

<p>heey</p><p><b>img inserted<b></p>

我试过使用 preg_replace 但这对我来说似乎太先进了..

谁能给我一些关于如何实现这一目标的建议?

4

2 回答 2

3

尝试这个:

<?PHP
    $subject = '<p>hey</p><p>[[{\"type\":\"media\",\"view_mode\":\"media_large\",\"fid\":\"67\",\"attributes\":{\"alt\":\"\",\"class\":\"media-image\",\"height\":\"125\",\"typeof\":\"foaf:Image\",\"width\":\"125\"}}]]</p>';
    $pattern = '/\[\[[^[]*]]/';
    $replace = '<b>img inserted</b>';
    $result = preg_replace($pattern, $replace, $subject);
    echo '<p>Result: '.htmlspecialchars($result).'</p>';
?> 

为了您的解释: /.../ 分隔正则表达式。[[ 必须转义,因为 [ 是一个特殊字符,因此\[\[. 之后,我们通过使用得到任何不是 [ 的字符[^[]。这会根据需要经常重复:[^[]*. 之后,我们有两个括号:\]\]

此外,如果方括号内有 [. 从你的格式来看,情况并非如此。否则,您将不得不使用更复杂的语法,如果那些额外的 [ 被转义 ([),则很可能使用反向引用。如果可能出现未转义的括号,则无法使用正则表达式解决此问题。

于 2013-03-24T16:04:54.183 回答
3
$string = '<p>hey</p><p>[[{"type":"media","view_mode":"media_large","fid":"67","attributes":{"alt":"","class":"media-image","height":"125","typeof":"foaf:Image","width":"125"}}]]</p>';
$new_string = preg_replace('/\[\[.*?\]\]/', '<b>img inserted</b>', $string);

echo $new_string;
于 2013-03-24T16:07:37.727 回答