Работа с речевыми метками с помощью 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-)"'
Другие вопросы по тегам