2011-10-06 38 views
8

Tôi gặp sự cố với khớp các thuộc tính html (trong một thẻ html khác) với regex. Để làm như vậy, tôi sử dụng mô hình: snippetRegex - Thuộc tính đối sánh trong mã HTML

myAttr=\"([^']*)\" 

HTML:

<img alt="" src="1-p2.jpg" myAttr="http://example.com" class="alignleft" /> 

nó chọn văn bản từ myAttr cuối /> nhưng tôi cần phải chọn myAttr="..." ("http://example.com")

Trả lời

16

Bạn có một dấu nháy đơn (') bên trong lớp nhân vật của mình nhưng bạn muốn báo giá (").

myAttr=\"([^"]*)\" 

Điều đó nói rằng, bạn thực sự shouldn't be parsing HTML with regexes. (Xin lỗi để liên kết với rằng câu trả lời một lần nữa. Có những câu trả lời khác cho câu hỏi đó là nhiều hơn về "nếu bạn biết những gì bạn đang làm ...". Nhưng nó là tốt để được nhận thức.)

Lưu ý rằng ngay cả khi bạn giới hạn sự hối lộ của mình chỉ với các thuộc tính mà bạn có nhiều điều cần cân nhắc:

  • Hãy cẩn thận không khớp với các nhận xét.
  • Cẩn thận không khớp với bên trong phần CDATA.
  • Điều gì sẽ xảy ra nếu thuộc tính được gắn với dấu nháy đơn thay vì dấu ngoặc kép?
  • Điều gì sẽ xảy ra nếu các thuộc tính không có dấu ngoặc kép?

Đây là lý do tại sao các trình phân tích cú pháp nghiêm trọng được xây dựng trước thường được gọi.

4

* là định lượng tham lam. Bạn nên làm theo nó với một dấu hỏi để làm cho nó không tham lam:

myAttr=\"([^']*?)\" 
2

Nếu bạn chỉ muốn tham số myAttr giá trị, sử dụng này:

"myAttr=\"([^\"]+)\"" 
0

bạn có thể thử sử dụng mà

myAttr=\"?[\w:\-]+ ?= ?("[^"]+"|'[^']+'|\w+)\" 
0

< [^>] *>

Chỉ cần cố gắng i này s trợ giúp này cho remove tất cả các thẻ

Ví dụ Something

+2

Bạn đọc câu hỏi? – Toto

Các vấn đề liên quan