【发布时间】:2012-11-30 07:38:57
【问题描述】:
编写一个非常简单的脚本解析器作为学校项目的一部分,虽然这不是必需的,但我很好奇它是否可以只使用正则表达式来完成。
语法类似于 ASP,脚本以 结尾。
它只支持一个命令“pr”,与echo或Response.Write相同。
现在我正在使用这个正则表达式来查找脚本块:
(<%\s*([\s\S]*?)\s*%>)
但如果我有这样的命令:
<% pr "%>"; %>
...它显然只匹配:
<% pr "%>
有没有办法使用纯正则表达式来忽略引号内的结束标签?我主要担心的是它可能匹配引号之间的标签,但实际上在引号之外,如果这有意义的话。比如……
<% pr "hello world"; %> "
从技术上讲,结束标签被引号包围,但它不在“打开”然后“关闭”引号内,而是相反。
如果使用非常简洁的正则表达式可以做到这一点,否则我怀疑如果我想支持此功能,我将不得不手动遍历传入的文本并自己解析块,这也没什么大不了的.
谢谢!
【问题讨论】:
-
如果你的报价不匹配,那是不可能的。例如,为什么不将您的最后一个示例扩展到
" <% pr "hello world"; %> "。<%和%>不是在引号内还是引号外?您能否保证在您的最后一个示例中,后面的"将在稍后的输入中匹配?