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

źródło: http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/Co to jest odpowiednik Java w tym preg_replace?

Unfortunality mój projekt potrzebuje semantycznego libs dostępna tylko dla Java ...

// Dzięki Celso

+1

Poważnie potrzebujesz zmienić to pytanie. 1) co to ma wspólnego z java? 2) jakie są twoje oczekiwane dane wejściowe i wyjściowe? – whaley

+0

spodziewany wynik: repl repl rep repl replikacja – celsowm

Odpowiedz

8

Użyj String.replaceAll() metoda:

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

Nadzieja to pomaga.

+1

Dzięki !!! i doskonała wersja z niewrażliwym przypadkiem: "(? i) słowo (?! ([^ <]+)?>)"; – celsowm

1

Przed zapewniając dalszą odpowiedź, starasz się analizowania dokument HTML? Jeśli tak, nie używaj wyrażenia regularnego, użyj analizatora html.

+0

moje narzędzie "generuje" XHTML zamieniające terminy w txt w nowych znacznikach używając terminów jako wartości wewnątrz znacznika, używam replaceAll podejście, ponieważ niektóre terminy mogą być łączone jak "Celso Araujo Fontes". Przykład, jak zastąpićWszystko myTerm w tej sytuacji myTerm to fajny przyjaciel – celsowm

2

Aby przetłumaczyć ten regex do użytku w Javie, wszystko co musisz zrobić, to pozbyć się / ogranicznikami i zmienić spływu i do modyfikatora inline, (?i). Ale to nie jest bardzo dobre wyrażenie; Chciałbym użyć tego zamiast:

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

Według funkcji Debug RegexBuddy jest, kiedy próbuje dopasować word w <a href="word">, oryginalny regex wymaga 23 kroków, aby je odrzucić, a ten trwa tylko siedem kroków. Rzeczywisty kod Java to

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

Dziękuję Alanowi za wyjaśnienie! – celsowm

Powiązane problemy