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

6

我有一个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"

但我不确定如何正确地使用语法。


3
在字符串字面值中使用转义引号:local pattern = " size=\"(%d+)\" " - Egor Skriptunoff
谢谢,这个完美地运作了! - greenage
1个回答

5
通常情况下,不建议使用Lua模式(或正则表达式)来解析XML,而应该使用XML解析器。
无论如何,在这个例子中,
local pattern = " size=(%d+) "
  • 空格很重要,因此开头和结尾的空格试图匹配空格字符但失败了。
  • 您已经注意到在 (%d) 周围需要双引号,它们必须在双引号字符串中转义。
  • + 是贪婪的,它可能在这里起作用,但非贪婪的 - 更好。

这可以工作

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

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接