<?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
发布于 2010-07-22 11:13:07
使用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);
}
}希望这能有所帮助。
发布于 2010-07-22 16:01:28
要将该正则表达式转换为在Java语言中使用,您需要做的就是去掉/分隔符,并将尾随的i更改为内联修饰符(?i)。但这不是一个很好的正则表达式;我会使用下面的代码:
(?i)word(?![^<>]++>)根据RegexBuddy的Debug特性,当它尝试匹配<a href="word">中的word时,原始的正则表达式需要23个步骤才能拒绝它,而这个只需要7个步骤。实际的Java代码是
str = str.replaceAll("(?i)word(?![^<>]++>)", "repl");发布于 2010-07-22 08:29:55
在提供进一步的答案之前,您是否正在尝试解析html文档?如果是这样的话,不要使用正则表达式,而要使用html解析器。
https://stackoverflow.com/questions/3304925
复制相似问题