如何获得标签之间的所有内容

时间:2018-08-20 20:02:06

标签: php

我有以下字符串

Something {{ another thing. You can use html code also, eg: <b>hello</b>}} 

我正在使用以下RegEx替换Something之后的字符串

$description = preg_replace(
    '/{{(.*)}}/i', '$2', $desc
);

输出为:某物

很好。

我正在使用Wysyng编辑器,用户可以使用该表达式,因此系统必须根据上述代码进行分隔。

有两个麻烦:

如果用户键入类似的内容不起作用

Something

{{
    Another text
}}

第二个麻烦。编辑器会生成上述表达式

<p>Something</p>
<p>{{</p>
    Another Text
<p>}}</p>

我正在使用strip_tags来获取真实的字符串。有办法吗?

1 个答案:

答案 0 :(得分:1)

要使.与字符串中的换行符匹配,必须使用s修饰符:

  

s(PCRE_DOTALL)

     

如果设置了此修饰符,则模式中的点元字符将匹配所有字符,包括换行符。没有它,换行符将被排除。此修饰符等效于Perl的/ s修饰符。否定类(例如[^ a])始终与换行符匹配,而与该修饰符的设置无关。

因此要将s添加到修饰符列表中:

preg_replace('/{{(.*)}}/is', '$2', $desc);

i修饰符(不区分大小写)实际上也没有任何用处,因为您只匹配特殊字符。

我还建议将.*修改为.*?,这样您就不会最终在文本的后面匹配替换的结尾}}

对于第二种情况,我将检查子字符串是否以所需的标签开头和结尾,然后将其删除-否则出错。根据使用情况,使用strip_tags可能会删除您实际希望拥有的更多功能。