<?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
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.
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");
Before providing a further answer, are you trying to parse an html document? If so, don't use regexes, use an html parser.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With