2010-07-22 108 views
5
<?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/与此preg_replace相当的Java是什么?

Unfortunality我的项目需要一个语义库avaliable只为Java ...

//感谢塞尔索

+1

您确实需要重新修改此问题。 1)这与java有什么关系? 2)你期望的输入和输出是什么? – whaley 2010-07-22 00:29:39

+0

预计结果: repl repl repl repl – celsowm 2010-07-22 00:38:36

回答

8

使用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

谢谢!和完美的版本与不敏感的情况:“(?i)word(?!([^ <]+)?>)”; – celsowm 2010-07-22 13:16:00

1

提供了更多的答案之前,你试图解析html文件?如果是这样,不要使用正则表达式,使用html解析器。

+0

我的工具“生成”XHTML替换新的标签中的txt条款使用条款作为标签内的值,我使用replaceAll因为有些术语可以像“Celso Araujo Fontes”一样合成。 例如,如何在这种情况下替换所有myTerm myTerm是很酷的朋友 – celsowm 2010-07-22 00:47:18

2

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

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

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

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

感谢艾伦的解释! – celsowm 2010-07-22 13:16:51

相关问题