我想编写一个模式,采用这样的字符串
/a/b/c
并提取 a
、b
和 c
。 a、b 和 c 是可选的,因此 ///
是有效输入。目前我有这个:"^%/(.-)%/(.-)%/(.-)$"
。这有效,除非我的输入是 /</>/b/c
,否则我会得到匹配项:<
、>
、b/c
。显然,第二个/
应该像这样转义:/<\\/>/b/c
,但这给了我:<\
,>
,b/c
。有没有办法编写这个模式,使得 /<\\/>/b/c
会给我:<\/>
,b
,c
?我知道我可以将第一个 .-
更改为 .+
,这可以解决这个确切的问题,但它不能解决更大的问题(即,如果转义斜线位于 b 部分怎么办)。
据我所知,这是不可能的。
通常,在 POSIX ERE 中,有效的正则表达式是:
^/(?:[^\\/]|\\.)*/(?:[^\\/]|\\.)*/(?:[^\\/]|\\.)*$
...其中
(?:[^\\/]|\\.)
表示“既不是 \
(转义)也不是 /
(分隔符),或者是转义字符”。
但是,Lua 模式没有
|
。量词也不适用于组。也就是说,无法区分正常字符和转义字符。
解决方案是从头开始编写自己的解析器。