Java 中与 preg_replace 等价的是什么?

发布于 2024-09-10 17:22:29 字数 534 浏览 8 评论 0原文

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

// 谢谢塞尔索

<?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>
?>

source: http://pureform.wordpress.com/2008/01/04/matching-a-word-characters-outside-of-html-tags/

Unfortunality my project needs a semantic libs avaliable only for Java...

// Thanks Celso

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

彻夜缠绵 2024-09-17 17:22:29

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

希望这会有所帮助。

Use the String.replaceAll() method:

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

Hope this helps.

我爱人 2024-09-17 17:22:29

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

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

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

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

To translate that regex for use in Java, all you have to do is get rid of the / delimiters and change the trailing i to an inline modifier, (?i). But it's not a very good regex; I would use this instead:

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

According to RegexBuddy's Debug feature, when it tries to match the word in <a href="word">, the original regex requires 23 steps to reject it, while this one takes only seven steps. The actual Java code is

str = str.replaceAll("(?i)word(?![^<>]++>)", "repl");
羁拥 2024-09-17 17:22:29

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

Before providing a further answer, are you trying to parse an html document? If so, don't use regexes, use an html parser.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文