gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 15:35:16 26 4
gpt4 key购买 nike

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

语法与 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"]

关于正则表达式,如果它在引号中,则忽略模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13842496/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com