2009-06-07 31 views
11

Trong Java, có cách nào đơn giản để trích xuất chuỗi con bằng cách chỉ định các dấu phân cách biểu thức chính quy ở hai bên, mà không bao gồm dấu phân tách trong chuỗi con cuối cùng không?Chuỗi Java - nhận mọi thứ giữa (nhưng không bao gồm) hai cụm từ thông dụng?

Ví dụ, nếu tôi có một chuỗi như thế này:

<row><column>Header text</column></row> 

cách dễ nhất để trích xuất các chuỗi con là gì:

Header text 

Xin lưu ý rằng các chuỗi có thể chứa ngắt dòng .. .

cảm ơn!

Trả lời

24

Viết một regex như thế này:

"(regex1)(.*)(regex2)" 

... và rút khỏi nhóm giữa từ khớp (để xử lý dòng mới trong mô hình của bạn, bạn muốn sử dụng Pattern.DOTALL).

Sử dụng ví dụ của bạn, chúng tôi có thể viết một chương trình như:

package test; 

import java.util.regex.Matcher; 
import java.util.regex.Pattern; 

public class Regex { 

    public static void main(String[] args) { 
     Pattern p = Pattern.compile(
       "<row><column>(.*)</column></row>", 
       Pattern.DOTALL 
      ); 

     Matcher matcher = p.matcher(
       "<row><column>Header\n\n\ntext</column></row>" 
      ); 

     if(matcher.matches()){ 
      System.out.println(matcher.group(1)); 
     } 
    } 

} 

nào khi chạy in ra:

Header 


text 
+0

@Adam ... chỉ vì tôi cần kích hoạt Eclipse để lấy ví dụ và muốn nhận được câu trả lời nhanh chóng;) –

+0

@Aaron: đủ công bằng. Tôi cũng có thể xóa bình luận đầu tiên của tôi sau đó :) Câu trả lời hay. – bernie

+0

@Aaron - cảm ơn bạn, ví dụ của bạn hoạt động! Nhưng bạn có thể cho tôi biết mô hình biểu thức chính quy nào sử dụng để trích xuất cùng một văn bản từ một chuỗi như thế này, trong đó bao gồm một số dấu nháy đơn? Tiêu đề \ n \ n \ ntext Tôi đã cố gắng sử dụng Pattern p = Pattern.compile ( " (. *) ", Pattern.DOTALL ); và giống nhau nhưng với dấu gạch chéo ngược ở phía trước dấu ngoặc kép nhưng không hoạt động. Xin lỗi, tôi rất mới với các biểu thức chính quy, đánh giá cao sự trợ giúp. Cảm ơn bạn một lần nữa! Anna –

2

Bạn không nên sử dụng biểu thức thông thường để giải mã XML - điều này cuối cùng sẽ phá vỡ nếu đầu vào không được kiểm soát chặt chẽ. Điều dễ nhất có lẽ là phân tích cú pháp XML trong một cây DOM (Java 1.4 và mới hơn chứa một trình phân tích cú pháp XML trực tiếp) và sau đó điều hướng cây để chọn ra những gì bạn cần.

Có lẽ bạn muốn nói những gì bạn muốn thực hiện với chương trình của mình?

+1

+1 một khi bạn đã có một cây DOM, bạn có thể sử dụng XPath để kéo ra các bit bạn muốn. –

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