Lua | String Patterns | Pattern在字符串中查找字符串
我正在制作一个游戏脚本编辑器,它几乎完成了。除了需要在键绑定中编写脚本等等,我还需要修复一些语法Highlighter的问题。 到目前为止,编辑器的外观如下:Lua | String Patterns | Pattern在字符串中查找字符串,string,lua,String,Lua,我正在制作一个游戏脚本编辑器,它几乎完成了。除了需要在键绑定中编写脚本等等,我还需要修复一些语法Highlighter的问题。 到目前为止,编辑器的外观如下:(UI尚未对其进行任何处理,请忽略它。) 正如您可以清楚地看到的,有一些bug需要解决,例如一些括号拒绝突出显示。但更大的问题在于我的搜索字符串模式: (([^\\]*[“\']).*2) 此模式导致: 几周前,我暂停了这方面的工作,我也不太记得模式是如何工作的。我尝试修改现有模式,以防止字符串之间的文本包含在匹配中,但它要么选择
(UI尚未对其进行任何处理,请忽略它。)
正如您可以清楚地看到的,有一些bug需要解决,例如一些括号拒绝突出显示。但更大的问题在于我的搜索字符串模式:
(([^\\]*[“\']).*2)
此模式导致:
几周前,我暂停了这方面的工作,我也不太记得模式是如何工作的。我尝试修改现有模式,以防止字符串之间的文本包含在匹配中,但它要么选择所有内容,要么找不到任何字符串。
我需要确保它也没有找到\'或\'作为字符串的指示符。您的模式有点复杂。您可以使用模式
%b”“
印刷品
"one"
"two"
"tree"
看
%bxy,其中x和y是两个不同的字符;此类项匹配
以x开头、以y结尾以及x和y所在位置的字符串
平衡。这意味着,如果从左到右读取字符串,
计算x的+1和y的-1时,结束y是第一个y,其中
计数达到0。例如,项%b()与表达式匹配
用平衡圆括号
您的问题是您正在使用一个
贪婪的
匹配。这将故意查找最长的匹配字符串。相反,您应该使用惰性
匹配。这将允许您只匹配第一个字符串。惰性匹配使用-
符号,而不是+
现在您可以为字符串的每个变量编写简单的模式
> print(([["foo"]]):match("\"[^\"]-\""))
"foo"
> print(([["foo" "bar"]]):match("\"[^\"]-\""))
"foo"
>
请提供更多详细信息,您正在寻找正则表达式匹配项吗?这并不能解决问题。OP说:我需要确保它也没有找到\'或\'作为字符串的指示符。
> print(([["foo"]]):match("\"[^\"]-\""))
"foo"
> print(([["foo" "bar"]]):match("\"[^\"]-\""))
"foo"
>