【问题标题】:Dealing with speech marks with string.match用 string.match 处理语音标记
【发布时间】:2016-03-31 11:22:57
【问题描述】:

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

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

【问题讨论】:

  • 在字符串文字中使用转义引号:local pattern = " size=\"(%d+)\" "
  • 谢谢你,这很好用!

标签: string lua lua-patterns


【解决方案1】:

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


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

local pattern = " size=(%d+) "
  • 空白很重要,所以开头和结尾的空白是 尝试匹配空白字符但失败。
  • 您已经注意到(%d) 周围需要双引号,它们必须在双引号字符串中进行转义。
  • + 是贪婪的,它可能在这里工作,但非贪婪的 - 更好 选择。

这行得通

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-09
    • 2013-11-14
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-15
    相关资源
    最近更新 更多