2010-07-22 10 views
5
<?php 
    $str = "word <a href=\"word\">word</word>word word"; 
    $str = preg_replace("/word(?!([^<]+)?>)/i","repl",$str); 
    echo $str; 
    # repl <word word="word">repl</word> 
?> 

nguồn: http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/Java tương đương với preg_replace này là gì?

Unfortunality dự án của tôi cần một libs ngữ nghĩa sẵn chỉ dành cho Java ...

// Cảm ơn Celso

+1

Bạn thực sự cần phải thuật lại câu hỏi này. 1) những gì hiện này phải làm gì với java? 2) đầu vào và đầu ra dự kiến ​​của bạn là gì? – whaley

+0

kết quả mong đợi: repl repl repl repl – celsowm

Trả lời

8

Sử dụng String.replaceAll() phương pháp:

class Test { 
    public static void main(String[] args) { 
    String str = "word <a href=\"word\">word</word>word word"; 
    str = str.replaceAll("word(?!([^<]+)?>)", "repl"); 
    System.out.println(str); 
    } 
} 

Hope this helps.

+1

Cảm ơn! và phiên bản hoàn hảo với trường hợp không nhạy cảm: "(? i) từ (?! ([^ <]+)?>)"; – celsowm

1

Trước khi cung cấp một câu trả lời hơn nữa, các bạn cố gắng để phân tích một tài liệu html? Nếu vậy, không sử dụng regexes, sử dụng một phân tích cú pháp html.

+0

công cụ của tôi "tạo" XHTML thay thế các thuật ngữ trong txt trong thẻ mới bằng cách sử dụng cụm từ như giá trị bên trong thẻ, tôi đang sử dụng replaceAll cách tiếp cận vì một số thuật ngữ có thể được tổng hợp như "Celso Araujo Fontes". Ví dụ: cách thay thếTất cả myTerm trong trường hợp này myTerm là người bạn thân – celsowm

2

Để dịch regex để sử dụng trong Java, tất cả các bạn phải làm là để loại bỏ các / delimiters và thay đổi trailing i một modifier inline, (?i). Nhưng nó không phải là một regex rất tốt; Tôi sẽ sử dụng này để thay thế:

(?i)word(?![^<>]++>) 

Theo tính năng gỡ lỗi RegexBuddy, khi nó cố gắng để phù hợp với word trong <a href="word">, regex ban đầu đòi hỏi 23 bước để từ chối nó, trong khi cái này chỉ mất bảy bước. Mã Java thực tế là

str = str.replaceAll("(?i)word(?![^<>]++>)", "repl"); 
+0

Cảm ơn Alan đã giải thích! – celsowm