0

首先,是的,我知道永远不应该使用正则表达式来解析 HTML,但是,在这种情况下,我正在获取一长串文本(实际上是 var_dump() 的输出)并使用几个正则表达式将其转换为 XHTML,所以我确切地知道我将要处理的标签。我序列中的最后两个正则表达式查找花括号并转换为 XHTML 片段。当花括号包含在字符串变量中时,它的效果很好,我<var></var>在之前的正则表达式的标签之间输出。

所以,目前,我正在使用:/\s*{\s*/u. <var></var>我需要做的是调整它以忽略标签中任何位置的任何花括号。

我试过使用:/\s*{\s*(?!(?<!<var>)[^\{]*<\/var>)/u但这不太正确。我还没有确定导致它无法正常工作的条件是什么。所以,我可能很接近这个正则表达式,或者我可能会走得很远。因此需要 SO 专业知识。谢谢你。

此外,如果这根本不可能,我可以做其他黑客攻击,即 base64_encode() 字符串,将其粘贴在<var></var>标签中,然后作为最后一个正则表达式,base64_decode() 任何被<var></var>标签包围的东西。我更愿意找到一个可用的正则表达式,更重要的是,只是好奇它是否可能。

4

1 回答 1

3

可能有效:

\s*{\s*(?:(?!(?:.*?</var>))|(?=[^<]+<var>))

差不多,我改写了这个问题:<var>我只匹配可以证明在<var>. 因此,花括号在<var>if 之外:

  1. 可以断言这是真的: (?!(?:.*?</var>)),它使用负前瞻来确保我们不会碰到结束</var>标签,或者
  2. 可以断言这是真的: (?=[^<]+<var>),它使用积极的前瞻来确保我们最终会在某个地方找到开始<var>标签。

嵌套标签肯定会失败<var>,但它似乎适用于我使用的测试用例。你可以在RegExr上运行它并告诉我你的想法。

于 2012-07-12T19:56:25.730 回答