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

Quelle: http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/Was ist das Java-Äquivalent zu diesem preg_replace?

Unfortunality mein Projekt eine semantische Libs nur für Java avaliable braucht ...

// Dank Celso

+1

Sie müssen diese Frage ernsthaft neu formulieren. 1) Was hat das mit Java zu tun? 2) Was ist Ihre erwartete Eingabe und Ausgabe? – whaley

+0

Ergebnis erwartet: repl repl repl repl – celsowm

Antwort

8

Verwenden Sie die String.replaceAll() -Methode:

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

Hoffnung, das hilft.

+1

Danke !!! und perfekte Version mit unempfindlichem Fall: "(? i) Wort (?! ([^ <]+)?>)"; – celsowm

1

Bevor eine weitere Antwort zu geben, sind Sie ein analysieren versuchen, HTML-Dokument? Verwenden Sie in diesem Fall keine Regexes, verwenden Sie einen HTML-Parser.

+0

mein Werkzeug "generiert" XHTML ersetzt Begriffe in einem TXT in einem neuen Tags mit den Begriffen als Wert innerhalb des Tags, ich benutze die replaceAll Ansatz, da einige Begriffe wie "Celso Araujo Fontes" zusammengesetzt werden können. Beispiel, wie replaceAll myTerm in dieser Situation myTerm ist cooler Freund – celsowm

2

Um diese Regex für den Einsatz in Java zu übersetzen, alles, was Sie tun müssen, ist die Beseitigung der / Trennzeichen erhalten und die hinteren i zu einem Inline-Modifikator ändern, (?i). Aber es ist keine sehr gute Regex; Ich würde dies statt:

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

Nach RegexBuddy der Debug-Funktion, wenn es die word in <a href="word"> entsprechen versucht, die ursprüngliche regex 23 Stufen erfordert es ablehnen, während diese ein nur sieben Schritte. Der tatsächliche Java-Code ist

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

Danke Alan für die Erklärung! – celsowm