处理带有引号的字符串匹配问题

我正在扫描一个 xml 页面的监控系统,以下是源数据:

`<queues>
<queue name="workQueue">
<stats size="0" consumerCount="28" enqueueCount="29320" dequeueCount="37000"/>

这是我目前的代码:

local pattern = " size=(%d+) "

local a = alarm.get("CO13974960-19518")

local vsize = string.match(a.message, pattern)

local sum = vsize

我试图从 XML 页面中定位这部分数据:

stats size="0"

我对数字 "0" 感兴趣,我正在寻找一种通过脚本捕获该数字 (无论它达到多少) 的方法。

我认为我的脚本正在查找:

size=0 而不是 size="0"

但我不确定正确的语法是什么。

点赞
用户1009479
用户1009479

通常情况下,不建议使用 Lua 模式(或正则表达式)来解析 XML,而应使用 XML 解析器。


无论如何,在这个例子中,

local pattern = " size=(%d+) "
  • 空格很重要,所以开头和结尾的空格实际上是在尝试匹配空格字符,但失败了。
  • 你已经注意到需要在 (%d) 周围加上双引号,双引号在双引号字符串中必须被转义。
  • + 是贪婪的,它可能在这里有效,但非贪婪的 - 是更好的选择。

这样就可以工作了

local pattern = "size=\"(%d-)\""

请注意,您可以使用单引号字符串,这样就不需要转义双引号:

local pattern = 'size="(%d-)"'
2016-03-31 11:41:04