替换被特定标记包围的字符UNLESS
首先,是的,我知道正则表达式不应该用于解析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>
标记。 我宁愿找到一个可用的正则表达式,更重要的是,只要有可能就好奇。
这可能工作:
s*{s*(?:(?!(?:.*?</var>))|(?=[^<]+<var>))
非常重要的是,我重新解释了这个问题:我不仅不匹配<var>
中的花括号,而且只匹配可以证明在<var>
之外的大括号。 因此,一个花括号在<var>
如果:
(?!(?:.*?</var>))
,它使用负向前视来确保我们不会打开关闭</var>
标记, 或者 (?=[^<]+<var>)
,它使用积极的向前看来确保我们最终会打开<var>
标签。 它肯定会失败,嵌套的<var>
标签,但它似乎与我使用的测试用例一起工作。 你可以在RegExr上运行它并告诉我你的想法。
上一篇: Replace character UNLESS surrounded by specific tag
下一篇: Compiler error when declaring a variable inside if condition and no curly braces