Что Java эквивалентен этому preg_replace?

wordword word";
    $str = preg_replace("/word(?!([^<]+)?>)/i","repl",$str);
    echo $str;
    # repl repl
?>

источник: http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/

Unfortunality для моего проекта нужно семантическое, освобождает доступный только для Java...

//Спасибо Celso

6
задан Mikepote 3 October 2016 в 09:30
поделиться

3 ответа

Используйте метод 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);
  }
}

Надеюсь, это поможет.

10
ответ дан 8 December 2019 в 17:18
поделиться

Чтобы преобразовать это регулярное выражение для использования в Java, все, что вам нужно сделать, это избавиться от разделителей / и заменить конечный i на встроенный модификатор (? i) . Но это не очень хорошее регулярное выражение; Вместо этого я бы использовал это:

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

Согласно функции отладки RegexBuddy, когда она пытается сопоставить слово в , исходное регулярное выражение требует 23 шага чтобы отвергнуть его, в то время как этот занимает всего семь шагов. Фактический код Java:

str = str.replaceAll("(?i)word(?![^<>]++>)", "repl");
3
ответ дан 8 December 2019 в 17:18
поделиться

Прежде чем дать дальнейший ответ, вы пытаетесь разобрать html-документ? В таком случае не используйте регулярные выражения, используйте парсер html.

1
ответ дан 8 December 2019 в 17:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: