2010-10-01 33 views
7

Trong PHP nếu chúng ta cần khớp với một cái gì đó như, ["one","two","three"], chúng ta có thể sử dụng cụm từ thông dụng sau đây với preg_match.Chức năng `preg_match_all` của PHP trong Java

$pattern = "/\[\"(\w+)\",\"(\w+)\",\"(\w+)\"\]/" 

Bằng cách sử dụng dấu ngoặc đơn, chúng tôi cũng có thể trích xuất các từ một, hai và ba. Tôi biết về đối tượng Matcher trong Java, nhưng không thể nhận được chức năng tương tự; Tôi chỉ có thể trích xuất toàn bộ chuỗi. Làm thế nào tôi sẽ đi về bắt chước hành vi preg_match trong Java.

Trả lời

13

Với Trình phù hợp, để nhận các nhóm bạn phải sử dụng phương thức Matcher.group().

Ví dụ:

Pattern p = Pattern.compile("\\[\"(\\w+)\",\"(\\w+)\",\"(\\w+)\"\\]"); 
Matcher m = p.matcher("[\"one\",\"two\",\"three\"]"); 
boolean b = m.matches(); 
System.out.println(m.group(1)); //prints one 

Ghi group(0) là toàn bộ cùng một chuỗi phù hợp.

Example on ideone


Resources:

0

Tôi biết bài đăng này đến từ năm 2010, thực tế là tôi vừa tìm kiếm nó, có thể có người khác vẫn cần đến nó. Vì vậy, đây là chức năng tôi tạo ra cho nhu cầu của tôi.

về cơ bản, nó sẽ thay thế tất cả các từ khóa có giá trị từ một json (hoặc mô hình, hoặc bất kỳ nguồn dữ liệu)

làm thế nào để sử dụng:

JsonObject jsonROw = some_json_object; 
String words = "this is an example. please replace these keywords [id], [name], [address] from database"; 
String newWords = preg_match_all_in_bracket(words, jsonRow); 

tôi sử dụng mã này trong bộ chuyển đổi chia sẻ của tôi.

public static String preg_match_all_in_bracket(String logos, JSONObject row) { 
    String startString="\\[", endString="\\]"; 
    return preg_match_all_in_bracket(logos, row, startString, endString); 
} 
public static String preg_match_all_in_bracket(String logos, JSONObject row, String startString, String endString) { 
    String newLogos = logos, withBracket, noBracket, newValue=""; 
    try { 
     Pattern p = Pattern.compile(startString + "(\\w*)" + endString); 
     Matcher m = p.matcher(logos); 
     while(m.find()) { 
      if(m.groupCount() == 1) { 
       noBracket = m.group(1); 
       if(row.has(noBracket)) { 
        newValue = ifEmptyOrNullDefault(row.getString(noBracket), ""); 
       } 
       if(isEmptyOrNull(newValue)) { 
        //no need to replace 
       } else { 
        withBracket = startString + noBracket + endString; 
        newLogos = newLogos.replaceAll(withBracket, newValue); 
       } 
      } 
     } 
    } catch (JSONException e) { 
     e.printStackTrace(); 
    } 
    return newLogos; 
} 

Tôi cũng mới sử dụng Java/Android, vui lòng sửa nếu bạn cho rằng đây là triển khai không tốt hoặc điều gì đó. tks