7
<?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 でのみ使用可能なセマンティック ライブラリが必要です...

// ありがとうセルソ

4

3 に答える 3

13

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-22T03:13:06.677 に答える
3

/その正規表現を Java で使用できるように変換するには、区切り文字を取り除き、末尾iをインライン修飾子(?i). しかし、これはあまり良い正規表現ではありません。代わりにこれを使用します:

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

RegexBuddy のデバッグ機能によると、wordinを照合しようとする<a href="word">と、元の正規表現では拒否するのに 23 ステップ必要ですが、これは 7 ステップしかかかりません。実際のJavaコードは

str = str.replaceAll("(?i)word(?![^<>]++>)", "repl");
于 2010-07-22T08:01:27.963 に答える
1

さらに回答を提供する前に、html ドキュメントを解析しようとしていますか? その場合は、正規表現を使用せず、html パーサーを使用してください。

于 2010-07-22T00:29:55.383 に答える