编写一个非常简单的脚本解析器作为学校项目的一部分,虽然它不是必需的但我很好奇是否可以只使用正则表达式来完成.
语法类似于ASP,其中脚本以<%开头,以%>结尾.
它只支持一个命令“pr”,它与echo或Response.Write相同.
现在我正在使用这个正则表达式来查找脚本块:
(<%\s*([\s\S]*?)\s*%>)
但如果我有这样的命令:
<% pr "%>"; %>
……它显然只匹配:
<% pr "%>
有没有办法使用纯正则表达式来忽略引号内的结束标记?我主要担心的是它可能匹配引号之间的标签,但实际上它们在它们之外,如果这有意义的话.例如…
<% pr "hello world"; %> "
从技术上讲,结束标记被引号包围,但它不在“开放”然后“关闭”引用内,而是相反.
如果这可能是正则表达式非常整洁,否则我怀疑,如果我想支持这个功能,我将不得不手动迭代传入的文本并自己解析块,这也没什么大不了的.
谢谢!
我认为这个应该符合您的需求:<%(“.*?”|.*?)*?%> (见
Demo).
说明:
虽然.*匹配尽可能长,.*?匹配尽可能少.
例如(使用伪代码),
"#foo# #bar#".matches(/#(.*)#/).group(1) // will return ["foo# #bar"]
而
"#foo# #bar#".matches(/#(.*?)#/).group(1) // will return ["foo","bar"]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。