我在一直在研究的语法荧光笔中遇到了麻烦。 PHP支持""
和''
之间包含的字符串。与C#不同,C#更容易通过仅允许""
来控制,使用选项@
来自动转义字符串。
如果我有两个字符串,就像这样:
$code = "print( \"<div class='test'>content?div><div class='test'>content</div>\" );";
如果我回复$ code,我会得到:
print( "<div class='test'>content?div><div class='test'>content</div>" );
这是我的问题。当我解析起始引用和结束引用之间的内容时,我删除了这些内容以便稍后放回(因此我不会突出显示),使用剪贴板工具(只需复制粘贴)。 我设置了使用正则表达式解析''
第一次之间的内容。最终结果(在两种字符串类型之后)将如下所示:
print( "<div class=>content?div><div class=>content</div>" );
如何修改我的正则表达式以回顾(从开始)和向前(从结束)以查找最顶部的字符串分隔符('
或"
)。很难解释,希望有人得到它,否则我只能忍受它。
答案 0 :(得分:2)
正则表达式无法做到这一点;它们不足以处理递归。它们无法正确关闭嵌套括号,它们无法正确关闭嵌套引号。至少对于这种功能,您需要一个下推式自动机(或无上下文语言)。