使用string.match处理语音标记

gre*_*age 6 string lua lua-patterns

我有一个xml页面,我有一个监控系统扫描,这里是源数据:

`<queues>
<queue name="workQueue">
<stats size="0" consumerCount="28" enqueueCount="29320" dequeueCount="37000"/>
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的代码:

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

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

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

local sum = vsize
Run Code Online (Sandbox Code Playgroud)

我正在尝试从XML页面中定位这一部分数据:

stats size="0"
Run Code Online (Sandbox Code Playgroud)

值"0"是我感兴趣的数字,我正在寻找一种方法来通过脚本捕获该数字(无论它到达什么).

我想我的脚本正在寻找:

size=0 而不是 size="0"

但我不确定如何执行此操作的正确语法.

Yu *_*Hao 5

通常,使用Lua模式(或正则表达式)来解析XML并不是一个好主意,而是使用XML解析器.


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

local pattern = " size=(%d+) "
Run Code Online (Sandbox Code Playgroud)
  • 空白很重要,因此开始和结束时的空白区域都试图匹配空白字符但却失败了.
  • 您已经注意到需要双引号(%d),它们必须以双引号字符串进行转义.
  • +贪婪,它可能在这里工作,但非贪婪-是一个更好的选择.

这有效

local pattern = "size=\"(%d-)\""
Run Code Online (Sandbox Code Playgroud)

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

local pattern = 'size="(%d-)"'
Run Code Online (Sandbox Code Playgroud)