正则表达式,忽略模式,如果它在引号中
发布时间:2020-12-13 21:53:54 所属栏目:百科 来源:网络整理
导读:编写一个非常简单的脚本解析器作为学校项目的一部分,虽然它不是必需的但我很好奇是否可以只使用正则表达式来完成. 语法类似于ASP,其中脚本以%开头,以%结尾. 它只支持一个命令“pr”,它与echo或Response.Write相同. 现在我正在使用这个正则表达式来查找脚本
编写一个非常简单的脚本解析器作为学校项目的一部分,虽然它不是必需的但我很好奇是否可以只使用正则表达式来完成.
语法类似于ASP,其中脚本以<%开头,以%>结尾. 它只支持一个命令“pr”,它与echo或Response.Write相同. 现在我正在使用这个正则表达式来查找脚本块: (<%s*([sS]*?)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"] (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |