2011-06-27 34 views
15

Tôi có tài liệu HTML nhiều dòng mà tôi đang cố gắng để lấy một số nội dung. Tôi đang sử dụng regex của java (tôi biết - XML ​​phân tích cú pháp bla bla bla, chỉ cần chịu với tôi ở đây xin vui lòng :)).Pattern.DOTALL with String.replaceAll

dfahfadhadaaaa<object classid="java:com.sun.java.help.impl.JHSecondaryViewer" width="14" height="14"> 
<param name="content" value="../Glossary/glInterlinkedTask.html"> 

<param name="text" value="interlinked task"> 
<param name="viewerActivator" value="javax.help.LinkLabel"> 
<param name="viewerStyle" value="javax.help.Popup"> 
<param name="viewerSize" value="390,340"> 
<param name="textFontFamily" value="SansSerif"> 
<param name="textFontWeight" value="plain"> 
<param name="textFontStyle" value="italic"> 
<param name="textFontSize" value="12pt"> 
<param name="textColor" value="blue"> 

<param name=iconByID" value=""> 
</object> 
sjtsjsrjrsjsrjsrj 

Tôi có HTML này trong chuỗi: đầu vào.

input = input.replaceAll("<object classid=\"java:com.sun.java.help.impl.JHSecondaryViewer.*?object>", "buh bye!"); 

Rõ ràng là nó không hoạt động. BAO GIỜ, tôi có thể nhận được một mẫu phù hợp nếu tôi sử dụng pattern.compile với Pattern.DOTALL.

Vì vậy, câu hỏi của tôi là - làm thế nào tôi có thể làm một cái gì đó như Pattern.DOTALL với string.replaceall?

+1

Aha! Tìm thấy cờ nội tuyến "(? S)". Nó tương đương với DOTALL nếu bạn đặt nó vào lúc bắt đầu của regex. Đã giải quyết được sự cố. – guywhoneedsahand

+0

Đây có phải là vấn đề lớn không? Bạn không thể chỉ gọi 'Pattern.compile', hay viết một trình bao bọc? –

+1

Chuẩn bị trước ('s)' cho mẫu có hoạt động không? Nó hoạt động trong các ngôn ngữ khác, không chắc chắn về Java. – ninjalj

Trả lời

28

Đính kèm (?s) vào phía trước của mô hình của bạn:

input = input.replaceAll("(?s)<object classid=\"java:com\\.sun\\.java\\.help\\.impl\\.JHSecondaryViewer.*?object>", "buh bye!"); 

Từ Javadoc:

chế độ Dotall cũng có thể được kích hoạt thông qua sự biểu hiện cờ nhúng (?s). (Các s là một mnemonic cho chế độ "single-line", đó là những gì này được gọi là trong Perl.)

cờ khác làm việc theo cách này cũng

cấu trúc đặc biệt (không chụp)

...

(?idmsux-idmsux) Không có gì, nhưng biến cờ trận đấu idmsux trên - off

Trên một lưu ý phụ, nếu mục tiêu của bạn là xóa các đối tượng không an toàn khỏi HTML khỏi một nguồn không đáng tin cậy, vui lòng không sử dụng các cụm từ thông dụng và vui lòng không blacklist thẻ.

+1

+1 mẹo rất hay! – Bohemian