【问题标题】:Match for several symbols in char-set匹配字符集中的多个符号
【发布时间】:2021-03-31 12:06:53
【问题描述】:

Lua(以及我认为的任何其他正则表达式)具有允许匹配集合中任何符号的字符集。有没有办法将该集合中的多个符号匹配为一个?示例

text:gsub("foo[^bar]-","") -- matches for any foo that is not followed by 'b', 'a' or 'r'

有没有办法让它允许 'b'、'a' 或 'r',但之后不能完全允许 ​​'bar'(可能还有一些非一个符号)模式?

【问题讨论】:

  • Lua 模式在检查多字符上下文方面很差。你现实生活中的问题是什么?
  • @WiktorStribiżew 我正在调整 Aegisub 脚本,它有类似 :gsub("(\\r[^}]-)}","%1\\alpha&H"..al.."&}") 的模式,它检查 \r 并没有结束标签。我希望它检查\r 后面没有\alpha 标签。 (所以\r\alpha不应该匹配)

标签: lua gsub lua-patterns


【解决方案1】:
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", "\0%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&}

【讨论】:

  • 进行了一些调整,因为\r 可以在它之后有更多的东西,它就像一个魅力!谢谢。
猜你喜欢
  • 2015-07-22
  • 1970-01-01
  • 2017-11-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多