Что такое Java-эквивалент этого preg_replace? - PullRequest
6 голосов
/ 22 июля 2010
<?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/

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

// Спасибо, Селсо

Ответы [ 3 ]

10 голосов
/ 22 июля 2010

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

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

3 голосов
/ 22 июля 2010

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

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

В соответствии с функцией отладки RegexBuddy, когда он пытается соответствовать word в <a href="word">, исходное регулярное выражение требует 23 шага, чтобы отклонить его, в то время как этот требует толькосемь шагов.Фактический код Java

str = str.replaceAll("(?i)word(?![^<>]++>)", "repl");
1 голос
/ 22 июля 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...