与preg_replace相同的Java是什么?

时间:2010-07-22 00:27:02

标签: java php regex replaceall

<?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的语义库...

//谢谢Celso

3 个答案:

答案 0 :(得分:10)

使用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 :(得分:3)

要翻译该正则表达式以便在Java中使用,您所要做的就是摆脱/分隔符并将尾随i更改为内联修饰符(?i)。但它不是一个非常好的正则表达式;我会改用它:

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

根据RegexBuddy的调试功能,当它尝试匹配word中的<a href="word">时,原始正则表达式需要23个步骤来拒绝它,而这一步只需要七个步骤。实际的Java代码是

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

答案 2 :(得分:1)

在提供进一步的答案之前,您是否正在尝试解析HTML文档?如果是这样,请不要使用正则表达式,使用html解析器。