题
我一直在玩这个小时或拖曳,并发现自己在路障与LUA模式相匹配的公用事业。我试图匹配字符串中的所有引用文本,并在需要时替换。
到目前为止,我提出的模式是:(?[“ '])(.-)%1
在某些情况下,这起作用,但并非所有情况:
Working: "This \"is a\" string of \"text to\" test with"
Not Working: "T\\\"his \"is\' a\" string\" of\' text\" to \"test\" wit\\\"h"
在不工作的示例中,我希望它与之匹配(我制作了一个我想要的匹配的函数,我只是在寻找与gsub一起使用的模式,并好奇LUA模式是否可以做到这一点):
string
a" string" of
is' a" string" of' text
test
his "is' a" string" of' text" to "test" wit
我将暂时继续使用我的功能,但是很好奇是否可以/应该使用模式,而我只是缺少带有模式的东西。
(一些编辑b/c i忘记了堆叠式流体的格式化)(另一个编辑以做一个非HTML示例,因为这导致了我试图解析HTML的假设)
解决方案
试图匹配逃脱的情况,使用正则表达式的引用文本就像试图使用割草机从田野上删除雏菊(和仅戴斯)。
我做了一个获得我想要的比赛的功能
这是正确的举动。
我很好奇LUA模式是否可以做到这一点
从实际的角度来看 即使模式可以做到这一点,您也不想这样做。 从理论的角度来看,您正在尝试找到一个均匀数量的后斜切之前的双引号。这绝对是一种常规语言,您想要的正则表达方式将是以下内容(Lua引用约定)
[[[^\](\\)*"(.-[^\](\\)*)"]]
引用的字符串将是结果#2。但是LUA模式是 不是 完整的正则表达式;特别是,您不能放 *
经过括号的模式。所以 我的猜测是,无法使用LUA模式解决此问题, 但是,由于LUA模式在自动机理论中不是标准的事情,因此我不知道您可以用来证明这一点的任何证明技术。
其他提示
逃脱引号的问题是,通常,如果报价前有奇数的后斜线,则它被逃脱了,如果有一个偶数的数字,则不是。我不认为LUA模式匹配功能足以表示这种情况,因此,如果您需要像这样解析文本,那么您应该寻求另一种方式。也许您可以迭代字符串并解析它,或者您可以依次找到每个引用,然后向后读取,数量斜切,直到找到一个非背心斜拉字符(或字符串的开始)。
如果您绝对必须出于某种原因使用模式,则可以尝试在多步骤过程中进行此操作。首先,GSUB连续两个后斜线的所有出现,并用一些前哨值替换它们。这 必须 成为字符串中尚未发生的值。如果您知道此字符串不包含不可打印的字符,则可以尝试“ 001”之类的东西。无论如何,一旦您替换了连续两个后斜线的所有序列,剩下的任何后斜线都将逃脱以下字符。现在,您可以应用原始图案,然后最后您可以再次用两个后斜线替换前哨价值的所有实例。
你应该 不是 试图用正则表达式解析HTML,HTML和XML为 不是 普通语言,无法通过正则表达方式成功操纵。您应该使用专用的HTML解析器。 这里有很多解释.