2016-03-31 10 views
6

Tôi có một trang xml rằng tôi có một hệ thống giám sát quét, đây là nguồn dữ liệu:Đối phó với dấu bài phát biểu với string.match

`<queues> 
<queue name="workQueue"> 
<stats size="0" consumerCount="28" enqueueCount="29320" dequeueCount="37000"/> 

Và đây là đoạn code tôi có cho đến nay:

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

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

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

local sum = vsize 

tôi đang cố gắng để nhắm mục tiêu chút dữ liệu này từ trang XML:

stats size="0" 

giá trị "0" là số tôi quan tâm đến, một Tôi đang tìm một cách để nắm bắt con số đó (bất kể nó đạt được gì) thông qua tập lệnh.

Tôi nghĩ rằng kịch bản của tôi đang tuyển dụng:

size=0 hơn size="0"

Nhưng tôi không chắc chắn về cú pháp chính xác về làm thế nào để làm điều này.

+3

Sử dụng dấu ngoặc kép trốn bên trong xâu: 'mẫu local = "size = \" (% d +) \ "" ' –

+0

Cảm ơn bạn, điều này hoạt động hoàn hảo! – greenage

Trả lời

5

Nói chung, không nên sử dụng mẫu Lua (hoặc regex) để phân tích cú pháp XML, thay vào đó hãy sử dụng trình phân tích cú pháp XML.


Dù sao, trong ví dụ này,

local pattern = " size=(%d+) " 
  • vấn đề Khoảng trắng, vì vậy không gian màu trắng ở đầu và cuối là cố gắng để phù hợp với nhân vật không gian trắng nhưng thất bại.
  • Bạn đã nhận thấy rằng bạn cần dấu ngoặc kép khoảng (%d), chúng phải được thoát trong chuỗi được trích dẫn kép.
  • + tham lam, nó có thể hoạt động ở đây, nhưng không tham số - là lựa chọn tốt hơn .

này hoạt động

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

Lưu ý bạn có thể sử dụng dấu ngoặc chuỗi duy nhất để bạn không cần phải thoát khỏi dấu ngoặc kép:

local pattern = 'size="(%d-)"' 
Các vấn đề liên quan