我正在开发一个Smarty修饰符,除了其他一些东西外,还允许我使用表情符号。一切都很好,但我从来没有这么好用正则表达式,所以我需要帮助。这是我的字符串:
:P <code>:P : P hello : P</code> :P [sub]ssss[/sub]<b>:P</b> : P
我用我们都知道的“笑脸”图释替换:P ,但问题是我不想用“笑”取代:P “内部代码标签:
<code></code>
换句话说,应忽略上述标签内的所有内容。替换应仅适用于所有:P 外部。到目前为止,这是我设法实现的目标:
\<code\>(^(.*?))\<\/code\>|:P
但它只匹配第一个:P ,然后在代码标记启动时停止。让我说得更清楚。
:P <code>:P : P hello : P</code> :P [sub]ssss[/sub]<b>:P</b> : P
我必须匹配第一个:P ,而不是第二个内部代码,代码结束标记和[sub]之间的第三个是有效的,而b里面的标记也是有效的。
谢谢。
答案 0 :(得分:0)
我假设您不允许在文本中使用功能字符(例如&#34;&gt;&#34;)或将其替换为例如html实体。如果是,请检查这是否适合您:
(?<disregard>\<code\>[^>]*\</code\>)|(?<capture>:P)
&#34;忽视&#34; group将消除你的所有代码并离开外面进行&#34;捕获&#34;被发现。