2010-07-22 89 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> 
?> 

來源:http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/與此preg_replace相當的Java是什麼?

Unfortunality我的項目需要一個語義庫avaliable只爲Java ...

//感謝塞爾索

+1

您確實需要重新修改此問題。 1)這與java有什麼關係? 2)你期望的輸入和輸出是什麼? – whaley 2010-07-22 00:29:39

+0

預計結果: repl repl repl repl – celsowm 2010-07-22 00:38:36

回答

8

使用String.replaceAll()方法:

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); 
    } 
} 

希望這有助於。

+1

謝謝!和完美的版本與不敏感的情況:「(?i)word(?!([^ <]+)?>)」; – celsowm 2010-07-22 13:16:00

1

提供了更多的答案之前,你試圖解析html文件?如果是這樣,不要使用正則表達式,使用html解析器。

+0

我的工具「生成」XHTML替換新的標籤中的txt條款使用條款作爲標籤內的值,我使用replaceAll因爲有些術語可以像「Celso Araujo Fontes」一樣合成。 例如,如何在這種情況下替換所有myTerm myTerm是很酷的朋友 – celsowm 2010-07-22 00:47:18

2

要翻譯該正則表達式以用於Java,您所要做的就是擺脫/分隔符,並將尾隨的i更改爲內聯修飾符(?i)。但它不是一個很好的正則表達式;我會使用它代替:

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

根據使用RegexBuddy的調試功能,當它試圖匹配<a href="word">word,原正則表達式需要23個步驟來拒絕它,而這一次只需要七個步驟。實際的Java代碼是

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

感謝艾倫的解釋! – celsowm 2010-07-22 13:16:51

相關問題