Работа с речевыми метками с помощью string.match
У меня есть страница 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"
Но я не уверен в правильном синтаксисе, как это сделать.
1 ответ
Вообще, не очень хорошая идея использовать шаблон Lua (или регулярное выражение) для анализа XML, вместо этого использовать синтаксический анализатор XML.
Во всяком случае, в этом примере
local pattern = " size=(%d+) "
- Пробел имеет значение, поэтому пробел в начале и конце пытается соответствовать пробелу, но не удалось.
- Вы уже заметили, что вам нужны двойные кавычки
(%d)
, они должны быть экранированы в двойных кавычках. +
жадный, это может работать здесь, но не жадный-
это лучший выбор.
Это работает
local pattern = "size=\"(%d-)\""
Обратите внимание, что вы можете использовать строки в одинарных кавычках, чтобы вам не нужно было избегать двойных кавычек:
local pattern = 'size="(%d-)"'