正则表达式,如果模式在引号中则忽略模式

2024-05-19

编写一个非常简单的脚本解析器作为学校项目的一部分,虽然这不是必需的,但我很好奇是否可以仅使用正则表达式来完成。

语法类似于 ASP,其中脚本以 结尾。

它只支持一个命令“pr”,与echo或Response.Write相同。

现在我正在使用这个正则表达式来查找脚本块:

(<%\s*([\s\S]*?)\s*%>)

但如果我有这样的命令:

<% pr "%>"; %>

...它显然只匹配:

<% pr "%>

有没有办法使用纯正则表达式来忽略引号内的结束标签?我主要担心的是,它可能会匹配引号之间的标签,但实际上在引号之外,如果这有意义的话。例如...

<% pr "hello world"; %> "

从技术上讲,结束标签被引号包围,但它不在“打开”然后“关闭”引号内,而是相反。

如果使用正则表达式可以做到这一点,那就太简洁了,否则我怀疑如果我想支持此功能,我将必须手动迭代传入的文本并自己解析块,这也没什么大不了的。

Thanks!


我认为这个应该适合你的需求:<%(".*?"|.*?)*?%>(参见Demo http://regexr.com?3348s).

解释:

While .*火柴越长越好, .*?火柴尽可能少.

例如(使用伪代码),

"#foo# #bar#".matches(/#(.*)#/).group(1) // will return ["foo# #bar"]

while

"#foo# #bar#".matches(/#(.*?)#/).group(1) // will return ["foo", "bar"]
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

正则表达式,如果模式在引号中则忽略模式 的相关文章

随机推荐