【问题标题】:What is the Java equivalent to this preg_replace?这个 preg_replace 的 Java 等价物是什么?
【发布时间】:2011-03-19 07:25:25
【问题描述】:
<?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 的语义库...

// 感谢塞尔索

【问题讨论】:

  • 你真的需要重新表述这个问题。 1)这与java有什么关系? 2)你预期的输入和输出是什么?
  • 预期结果:repl replrepl repl

标签: java php regex replaceall


【解决方案1】:

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

希望这会有所帮助。

【讨论】:

    【解决方案2】:

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

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

    根据RegexBuddy的Debug特性,当它试图匹配&lt;a href="word"&gt;中的word时,原来的regex需要23个步骤来拒绝它,而这个只需要7个步骤。实际的Java代码是

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

    【讨论】:

    • 感谢艾伦的解释!
    【解决方案3】:

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

    【讨论】:

    • 我的工具“生成”XHTML 替换新标签中的 txt 中的术语,使用术语作为标签内的值,我使用的是 replaceAll 方法,因为某些术语可以像“Celso Araujo Fontes ”。例如,在这种情况下如何替换 myTerm myTerm 是 很酷的朋友
    猜你喜欢
    • 2013-05-17
    • 2018-11-30
    • 1970-01-01
    • 1970-01-01
    • 2019-03-10
    • 2011-11-17
    • 2011-09-02
    • 2013-04-14
    • 1970-01-01
    相关资源
    最近更新 更多