首先,是的,我知道正则表达式永远不应该用于解析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>
标签。我更愿意找到一个可用的正则表达式,更重要的是,如果可能的话,只是好奇。
答案 0 :(得分:3)
此可能有效:
\s*{\s*(?:(?!(?:.*?</var>))|(?=[^<]+<var>))
差不多,我重新提出了这个问题:我没有匹配<var>
中的花括号,而只匹配可以证明在<var>
之外的花括号。因此,大括号位于<var>
之外,如果:
(?!(?:.*?</var>))
,它使用否定前瞻来确保我们没有点击结束</var>
标签,或 (?=[^<]+<var>)
,它使用正向前瞻来确保我们最终会到达开头<var>
标记的某个地方。嵌套的<var>
标签肯定会失败,但它似乎适用于我使用的测试用例。您可以在RegExr上运行它并告诉我您的想法。