Lua | String Patterns | Pattern在字符串中查找字符串

Lua | String Patterns | Pattern在字符串中查找字符串,string,lua,String,Lua,我正在制作一个游戏脚本编辑器,它几乎完成了。除了需要在键绑定中编写脚本等等,我还需要修复一些语法Highlighter的问题。 到目前为止,编辑器的外观如下:(UI尚未对其进行任何处理,请忽略它。) 正如您可以清楚地看到的,有一些bug需要解决,例如一些括号拒绝突出显示。但更大的问题在于我的搜索字符串模式: (([^\\]*[“\']).*2) 此模式导致: 几周前,我暂停了这方面的工作,我也不太记得模式是如何工作的。我尝试修改现有模式,以防止字符串之间的文本包含在匹配中,但它要么选择

我正在制作一个游戏脚本编辑器,它几乎完成了。除了需要在键绑定中编写脚本等等,我还需要修复一些语法Highlighter的问题。 到目前为止,编辑器的外观如下:
(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"
>