匹配字符集中的几个符号
Match for several symbols in char-set
Lua(以及我认为的任何其他正则表达式)具有允许匹配集合中任何符号的字符集。有没有办法将该组中的多个符号匹配为一个?例子
text:gsub("foo[^bar]-","") -- matches for any foo that is not followed by 'b', 'a' or 'r'
有没有办法让它允许 'b'、'a' 或 'r',但不允许恰好 'bar'(也许还有一些非一符号) 之后的模式?
local s = "{aaa\rbbb} {ccc\r\alpha} {eee\r}"
print(s)
local s1 = s:gsub("(\r[^}]-)}","%1\alpha&H&}")
print(s1)
local s2 = s:gsub("\alpha", "[=10=]%0") -- insert zero byte before each \alpha
:gsub("(\r%f[^r%z][^}]*)}", "%1\alpha&H&}")
:gsub("%z", "") -- remove all zero bytes
print(s2)
输出:
{aaa\rbbb} {ccc\r\alpha} {eee\r}
{aaa\rbbb\alpha&H&} {ccc\r\alpha\alpha&H&} {eee\r\alpha&H&}
{aaa\rbbb\alpha&H&} {ccc\r\alpha} {eee\r\alpha&H&}
Lua(以及我认为的任何其他正则表达式)具有允许匹配集合中任何符号的字符集。有没有办法将该组中的多个符号匹配为一个?例子
text:gsub("foo[^bar]-","") -- matches for any foo that is not followed by 'b', 'a' or 'r'
有没有办法让它允许 'b'、'a' 或 'r',但不允许恰好 'bar'(也许还有一些非一符号) 之后的模式?
local s = "{aaa\rbbb} {ccc\r\alpha} {eee\r}"
print(s)
local s1 = s:gsub("(\r[^}]-)}","%1\alpha&H&}")
print(s1)
local s2 = s:gsub("\alpha", "[=10=]%0") -- insert zero byte before each \alpha
:gsub("(\r%f[^r%z][^}]*)}", "%1\alpha&H&}")
:gsub("%z", "") -- remove all zero bytes
print(s2)
输出:
{aaa\rbbb} {ccc\r\alpha} {eee\r}
{aaa\rbbb\alpha&H&} {ccc\r\alpha\alpha&H&} {eee\r\alpha&H&}
{aaa\rbbb\alpha&H&} {ccc\r\alpha} {eee\r\alpha&H&}