2011-01-07 31 views
6

Tôi đang cố gắng lấy văn bản trong một thẻ nhất định. Vì vậy, nếu tôi có:Java Regex để nhận văn bản từ neo HTML (<a> ...</a>) thẻ

<a href="http://something.com">Found<a/> 

Tôi muốn có thể truy xuất văn bản Found.

Tôi đang cố gắng làm điều đó bằng cách sử dụng regex. Tôi có thể làm điều đó nếu số <a href="http://something.com> vẫn giữ nguyên nhưng không.

Cho đến nay tôi có điều này:

Pattern titleFinder = Pattern.compile(".*[a-zA-Z0-9 ]* ([a-zA-Z0-9 ]*)</a>.*"); 

Tôi nghĩ rằng hai phần cuối cùng - các ([a-zA-Z0-9 ]*)</a>.* - là ok nhưng tôi không biết phải làm gì cho phần đầu tiên.

+8

[Không phân tích HTML bằng regex] (http://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags/1732454#1732454). Sử dụng một trình phân tích cú pháp XML/HTML thích hợp ... – ircmaxell

+0

cảm ơn câu trả lời, nhìn vào nó = D nhưng im không làm nó cho rất nhiều thẻ html của nó chỉ cho một thẻ này xảy ra 15 lần ... là vẫn còn xấu ? – BeginnerPro

+0

Các regex của Java không đủ mạnh để phân tích cú pháp HTML; các ngôn ngữ khác, tuy nhiên, là. Tại sao bất cứ ai trong tâm trí của họ sẽ sử dụng Java cho công việc regex là hoàn toàn vượt ra ngoài tôi. – tchrist

Trả lời

6

Khi họ nói, không sử dụng regex để phân tích cú pháp HTML. Nếu bạn nhận thức được những thiếu sót, bạn có thể nhận được đi với nó, mặc dù. Hãy thử

Pattern titleFinder = Pattern.compile("<a[^>]*>(.*?)</a>", Pattern.DOTALL | Pattern.CASE_INSENSITIVE); 
Matcher regexMatcher = titleFinder.matcher(subjectString); 
while (regexMatcher.find()) { 
    // matched text: regexMatcher.group(1) 
} 

sẽ lặp qua tất cả các kết quả phù hợp trong chuỗi.

Nó sẽ không xử lý các thẻ lồng nhau <a> và bỏ qua tất cả các thuộc tính bên trong thẻ.

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