如何编写一个能够识别转义字符的 lua 模式?

问题描述 投票:0回答:1

我想编写一个模式,采用这样的字符串

/a/b/c
并提取
a
b
c
。 a、b 和 c 是可选的,因此
///
是有效输入。目前我有这个:
"^%/(.-)%/(.-)%/(.-)$"
。这有效,除非我的输入是
/</>/b/c
,否则我会得到匹配项:
<
>
b/c
。显然,第二个
/
应该像这样转义:
/<\\/>/b/c
,但这给了我:
<\
>
b/c
。有没有办法编写这个模式,使得
/<\\/>/b/c
会给我:
<\/>
b
c
?我知道我可以将第一个
.-
更改为
.+
,这可以解决这个确切的问题,但它不能解决更大的问题(即,如果转义斜线位于 b 部分怎么办)。

lua lua-patterns
1个回答
0
投票

据我所知,这是不可能的。

通常,在 POSIX ERE 中,有效的正则表达式是:

^/(?:[^\\/]|\\.)*/(?:[^\\/]|\\.)*/(?:[^\\/]|\\.)*$

...其中

(?:[^\\/]|\\.)
表示“既不是
\
(转义)也不是
/
(分隔符),或者是转义字符”。

但是,Lua 模式没有

|
。量词也不适用于组。也就是说,无法区分正常字符和转义字符。

解决方案是从头开始编写自己的解析器。

© www.soinside.com 2019 - 2024. All rights reserved.