PHP正则表达式:修改标签到标签+内容

时间:2017-01-19 02:51:52

标签: php regex

我正在使用以下内容在code标记内的任何内容中使用htmlentities:

$content = preg_replace_callback('#\<code\>(.+?)\<\/code\>#s',create_function('$matches','return "<code>".htmlentities($matches[1])."</code>";'),$content);

这样我就可以将它回显到页面上。这非常有效,除非它仅在代码标记正好为<code>时才有效。如何更新正则表达式,以便它可以使用<code + anything + >内的内容?

例如:

<code>
<code class="someclass">
<code class="someclass" data-attr="value">

1 个答案:

答案 0 :(得分:2)

$content = preg_replace_callback('#(\<code[^>]*\>)(.+)\<\/code\>#s',create_function('$matches','return $matches[1] . htmlentities($matches[2])."</code>";'),$content);

我不明白为什么&lt;和&gt;你的模式正在逃脱,是否有必要?尝试删除那里的转义码:(<code[^>]*>) 它应该可以正常工作。

请注意,\<code[^>]*\>表示:<code加上任何不是>的内容,然后关闭>作为匹配项。

您现在正在获得两场比赛:(\<code[^>]*\>)(.+)并使用它们来创建结果。

注意(。+?)没有意义,你可能想要:(。*)这意味着0或更多的任何实例,然后模式必须在那之后找到一个结束代码标签。如果输入值中只有一个</code>可能,这很有效,如果有多个,则会遇到问题,因为模式可能会一直读到最后一个。

这是我使用的版本。 (。*)处理代码标记之间没有任何内容的情况。

$content = preg_replace_callback('#(<code[^>]*>)(.*)</code>#s',create_function('$matches','return $matches[1] . htmlentities($matches[2])."</code>";'),$content);