【问题标题】:Lua pattern to replace any word,character, digit or symbol followed by a paticular stringLua 模式替换任何单词、字符、数字或符号,后跟一个特定的字符串
【发布时间】:2015-03-26 13:18:09
【问题描述】:

我想用 Lua 中的字符串 "some-word\" 替换任何单词、字符、数字或符号(; , . 除外)。更像是正则表达式中的“*”选项。 Lua中有没有类似'*'的东西?

示例:

some-word\\test -> some-word\\###

some-word\\b*ax#@$6; -> some-word\\###;

some-word\\?foo,> -> some-word\\###,

我正在使用的代码:

d = "some-word" 
p = (tostring(d).."\\[.%c%w%p^%;^%,^%.]+") 
c = "###" 
s = "testing some-word\\test-2 later some-word\\&^*; some-word\\set_34$ " 
print(p) 
res = (string.gsub(s,p,c)) print(res)

【问题讨论】:

  • 这是我目前使用的代码,但它会替换所有符号,如何专门说不替换;或 , 或 . d = "some-word" p = (tostring(d).."\\[.%c%w%p^%;^%,^%.]+") c = "###" s = "testing some-word\\test-2 later some-word\\&^*; some-word\\set_34$ " print(p) res = (string.gsub(s,p,c)) print(res)
  • 请将您的评论移至您的问题。

标签: string lua lua-patterns


【解决方案1】:

(some%-word)\[^;,.%s]* 有效,请注意:

  • - 是 Lua 模式中的魔术字符,需要转义。
  • some%-word() 包围,因此被%1 捕获。
  • 在字符类中,以^开头表示 以下内容的补充。

测试:

d = "some%-word" 
p = "(" .. d .. ")" .. "\\[^;,.%s]*"
c = "%1###" 
s = "testing some-word\\test-2 later some-word\\&^*; some-word\\set_34$ " 
print(p) 
res = string.gsub(s,p,c)
print(res)

输出:

(some%-word)\[^;,.%s]*
testing some-word### later some-word###; some-word###

【讨论】:

  • 如果我想用##\\## 替换整个some-word\\ 怎么办?像这样 some-word\\test -> ##\\##
  • @nmuliker 将 c 更改为 "##\\##"
猜你喜欢
  • 2023-03-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多