【问题标题】:Lua regex for ascii(0-127) characters用于 ascii(0-127) 字符的 Lua 正则表达式
【发布时间】:2017-04-13 04:58:06
【问题描述】:

我正在使用 LUA 并尝试替换某些输入字符串中的非 ascii 字符。
我使用了[^\x00–\x7F] 正则表达式,但出现以下错误:
格式错误的模式(缺少']') 我也使用了[^[:ascii:]],但它不起作用。
我认为[^\x00–\x7F] 是正确的方法,但我可能错过了一些逃避。
请帮忙!

【问题讨论】:

  • 替换还是删除?试试string.gsub(s, "[^\000-\127]", "")
  • 替换:string.gsub(jsonReport, "[^\000-\127]", "?")。我尝试了你的建议:stii​​l getting : malformed pattern (missing ']')

标签: regex lua hex ascii


【解决方案1】:

替换非ASCII字符:

string.gsub(your_string, "[\128-\255]", what_they_should_be_replaced_with)

另一种方式:

string.gsub(your_string, "[^%z\1-\127]", what_they_should_be_replaced_with)

对于 UTF-8 文本:

string.gsub(your_string, "[\192-\255][\128-\191]*", what_they_should_be_replaced_with)

【讨论】:

  • 这个"[^%z\1-\127]" 似乎不太适合替换,请参阅ideone.com/RZ1CvZ。你知道为什么它用 2 个^s 替换了一个§ 吗?
  • @WiktorStribiżew - 因为 UTF-8 符号 § 存储为两个字节。
  • 我是这么理解的,但是怎么把§换成^呢?
  • 它似乎工作正常。但是有些非ascii字符如何替换为??而不是?,但对我来说还是可以的。
  • @EgorSkriptunoff,非常感谢!
猜你喜欢
  • 2013-02-19
  • 2011-03-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 2022-01-25
  • 2011-01-08
相关资源
最近更新 更多