<?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
答案 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解析器。