标签: lua-patterns

查找与Lua中的模式匹配的第一个字符串(XML模式匹配)

我目前正在使用以下代码来解析Xml文件的一部分(我首先将整个文件读入一个字符串).

for xmlMatch in xmlString:gmatch("<MyXmlElement.*</MyXmlElement>") do
    -- Do something.
end
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是for循环只执行一次,因为gmatch函数只返回一个字符串,该字符串从MyXmlElement的第一个实例开始,并在MyXmlElement的最后一个实例的闭包处结束.我怎样才能解析字符串,以便在匹配模式每当字符串"</MyXmlElement>"第一个发现(而不是只有最后一种情况)?

xml string lua lua-patterns

2
推荐指数
1
解决办法
1216
查看次数

Lua模式查询

我需要从一个更大的字符串中检测出一个单词说约翰,说约翰是个好男人 所以我有这个模式来找到这个词

[j][o][h][n]
Run Code Online (Sandbox Code Playgroud)

并按如下方式使用:

local pattern = "[j][o][h][n]"
local str = "john is a good man"
print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)


为了接受字母多次出现(例如jooohn是一个好人),我将模式修改为

[j]+[o]+[h]+[n]+
Run Code Online (Sandbox Code Playgroud)

我需要忽略可能出现在单词之间的空格(或其他非字母字符)(例如joh; n是一个好人),所以我在每个字母中加上[^ az]*,结果模式是

[j]+[^a-z]\*[o]+[^a-z]\*[h]+[^a-z]\*[n]+[^a-z]\*
Run Code Online (Sandbox Code Playgroud)

现在这对于"jooh!n is a good man"这样的词来说是完美的.但如果!符号出现在重复的字母内,模式失败.例如,在jo!ohn是一个好人,没有检测到模式.如何修改模式以实现此目的?

编辑

例:

local str = "jooohn is a good man"
local pattern = "[j]+[^a-z]*[o]+[^a-z]*[h]+[^a-z]*[n]+[^a-z]*"
print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)

这将打印 1 7

 local str = "joo!ohn is a good man"
 local pattern = "[j]+[^a-z]*[o]+[^a-z]*[h]+[^a-z]*[n]+[^a-z]*"
 print(str:find(pattern))
Run Code Online (Sandbox Code Playgroud)

只打印nil 我需要一个允许我在场景2中检测到joo!ohn的模式

string lua lua-patterns

2
推荐指数
1
解决办法
201
查看次数

将多个 string.match 函数合并到一行中

我有一个功能,需要检查特殊字符并在找到特殊字符时将其破坏。

这是我尝试过的。

local text = "h!ello\"wor%ld_t@xt.p^*sp&ki#$te"

if (string.match(text, "&") ~= nil) then
  print("Invalid Character \n")
end 

if (string.match(text, "\"") ~= nil) then
  print("Invalid Character \n")
end 

if (string.match(text, "#") ~= nil) then
  print("Invalid Character \n")
end 

if (string.match(text, "$") ~= nil) then
  print("Invalid Character \n")
end 

if (string.match(text, "@") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "%%") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "!") ~= nil) then
  print("Invalid Character \n")
end

if (string.match(text, "^") ~= …
Run Code Online (Sandbox Code Playgroud)

string lua lua-patterns

2
推荐指数
1
解决办法
1488
查看次数

吨和正则表达式

给定是一个(时间 - 值)字符串,如:

local dt = "12:34:56"
Run Code Online (Sandbox Code Playgroud)

我想把这个字符串剪成

hh, mm, ss = "12", "34", "56"
Run Code Online (Sandbox Code Playgroud)

因此我使用这样的正则表达式:

local hh = string.format("%02d", tonumber( dt:gsub(":..:..","") ))
local mm = string.format("%02d", tonumber( dt:gsub(":..:",""):gsub(":","") ))
local ss = string.format("%02d", tonumber( dt:gsub("..:..:","") ))
Run Code Online (Sandbox Code Playgroud)

哪个工作正常.(时间字符串来自userinput,所以如果用户写"1"而不是"01",我将其填充为0)

但是在值从0开始的情况下,它超出了luas tonumber()的范围(我猜是签名为零),与"1"相同,tonumber()似乎不能处理低于"2"的值.)任何人都可以告诉我该如何处理这种情况?

除此之外,如果你能告诉我正则表达式中的不良练习,我会很高兴,如果有的话.

regex lua numbers lua-patterns

2
推荐指数
1
解决办法
558
查看次数

如何获取lua字符串匹配来解析环境变量字符串?

我有一个用lua编写的配置文件解析器.

我想检测作为环境变量的值并使用os.getenv更改它们.

这可能有点雄心勃勃,因为我可以拥有像这样的价值观

"a string with an embedded ${VARIABLE} in here"
Run Code Online (Sandbox Code Playgroud)

要么

"another string with an env $VARIABLE"
Run Code Online (Sandbox Code Playgroud)

而且我应该允许使用double $$来逃避它们以允许文字$.

我该怎么做呢?

这是我到目前为止所做的,但这是不对的

local envvar = string.match(value, "%$([%w_]+)")
if envvar then
  print("Envvar=", envvar)
  value = value:gsub("(%$[%w_]+)", os.getenv(envvar))
end
Run Code Online (Sandbox Code Playgroud)

例如,我无法弄清楚如何在此处使用%b余额选项来正确匹配{}组合.并使它们可选.如何稳健地完成这项工作?

事实上,我意识到它可能比这更复杂.如果指定了多个环境变量怎么办?

lua string-matching luajit lua-patterns

2
推荐指数
1
解决办法
242
查看次数

字符串模式,匹配第一个,最外面的一对括号?

所以这里有一个简单的例子,比如我有一个类似的方程式

local equation = "((5*2)+3)-(3^5)"
Run Code Online (Sandbox Code Playgroud)

而且我想抓住 "((5*2)+3)"

起初我试过了

equation:match("%((.*)%)")
Run Code Online (Sandbox Code Playgroud)

但是*贪婪,所以它抓住了整个方程式.

然后我试了一下

equation:match("%((.-)%)")
Run Code Online (Sandbox Code Playgroud)

但是-很懒惰,它被捕获了"((5*2)"

显然,我错了.我应该如何用字符串模式捕获括号?

string lua brackets lua-patterns

2
推荐指数
1
解决办法
111
查看次数

Lua模式验证DNS地址

我目前正在使用此正则表达式来松散地验证DNS地址:

^[A-Za-z0-9_]+(\.[A-Za-z0-9_]+)*$
Run Code Online (Sandbox Code Playgroud)

这将匹配之类的东西hello.com,hellohello.com.com.com.我试图将它完全复制到Lua模式中.我提出了以下Lua模式:

^([%d%a_]+(%.[%d%a_]+)*)$
Run Code Online (Sandbox Code Playgroud)

这样我就可以使用以下代码来验证DNS地址:

local s = "hello.com"
print(s:match("^([%d%a_]+(%.[%d%a_]+)*)$"))
Run Code Online (Sandbox Code Playgroud)

出于某种原因,这总是失败,虽然它看起来像正则表达式的1:1副本.

有什么想法吗?

regex dns lua lua-patterns

2
推荐指数
1
解决办法
301
查看次数

Lua gsub chars'('和')'失败了

出于某种原因,只有开放和关闭支架不会工作,其他所有都很好.

RequestEncoded = string.gsub(RequestEncoded, '<', ' ')
RequestEncoded = string.gsub(RequestEncoded, '>', ' ')
RequestEncoded = string.gsub(RequestEncoded, '"', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\'', ' ')
RequestEncoded = string.gsub(RequestEncoded, '\\', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '(', ' ') keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, ')', ' ')
--  RequestEncoded = string.gsub(RequestEncoded, "\x28", " ") --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, "\x29", ' ')
--  RequestEncoded = string.gsub(RequestEncoded, '\050', ' ') --keeps failing
--  RequestEncoded = string.gsub(RequestEncoded, '\051', ' ')
Run Code Online (Sandbox Code Playgroud)

lua gsub lua-patterns

2
推荐指数
1
解决办法
119
查看次数

Lua正则表达式替换花括号

我想替换花括号,它的意思是something in here {uid} {uid2}to something in here :id :id

我尝试了以下方法:

local v = "something in here {uid} {uid2}"
local regex = "^{([^}]+)}"

print(v:gsub(v:match(regex), ":id"):gsub("{", ""):gsub("}", ""))
Run Code Online (Sandbox Code Playgroud)

但这是行不通的。但是,当我删除“这里的东西”时,它确实起作用。请帮忙。

regex lua lua-patterns

2
推荐指数
1
解决办法
43
查看次数

lua中“%w”和“%W”的区别?

%w 和 %W 如下所示: Str = string.gsub(Str, \xe2\x80\x9c%f[%w]cat%f[%W]\xe2\x80\x9d

\n

小 %w 和大 %W 有什么区别?

\n

以下是更多示例: for _ in string.gmatch(\xe2\x80\x9c\\n\xe2\x80\x9d .. Str .. \xe2\x80\x9c\\n\xe2\x80\x9d, \xe2\x80\x9c%Wcat%W\xe2\x80\x9d) do ,

\n

if Pos1 == 0 or string.find(Str, \xe2\x80\x9c^%W\xe2\x80\x9d, Pos1) then

\n

我知道 %w 匹配单词字符

\n

所以我希望 %W 匹配大写单词字符?

\n

lua lua-patterns

2
推荐指数
1
解决办法
54
查看次数

标签 统计

lua ×10

lua-patterns ×10

string ×4

regex ×3

brackets ×1

dns ×1

gsub ×1

luajit ×1

numbers ×1

string-matching ×1

xml ×1