2017-08-28 8 views
0

私は次のようなHTML文字列を持っています(少なくとも私にとっては)表現(>[^>]*?)(word)([^<]*?<)と私は$1{$2}$3を使用しました置換のための...驚くが、それが唯一の唯一の最初の試合のために働いて、出力されました:サラウンド括弧付きXMLタグ内のすべての一致する単語が

<whatevertag do-not-change-this="word" or-this-word=""> 
    these {word}s should be replaced with a word inside braces, 
    and also the same word thing for 
    <whatevertag> 
     the nested tags that has the {word} 
    </whatevertag> 
</whatevertag> 

なぜこれが起こっているのですか?どのようにそれを修正することができますか?

答えて

2

あなたの正規表現は成功しなかったある理由は次のとおりです。だから、

(>[^>]*?)     # read '>', then lazily any character except '>' 
(word)      # until you encounter 'word' 
([^<]*?<)     # then lazily read any character except '<' until you find a '<' 

、あなたはあなたの正規表現は、最初の「<」まで読み込んで「言葉」を撮影してきた時はいつでも。だからこそ、第二の「言葉」は捕らえられません。

あなたが使用できることです:あなたはそれを明確にあなたが外のすべてをキャプチャすることを確認あなたの質問を再読:

(?:(?!word).)+(word) 

説明:example

EDITで

(?:       # Do not capture 
(?!word).)+     # Negative lookahead for word. Read 1 char 
(word)      # until you find 'word' 

ルック「タグ」をご覧ください。 example 2

正規表現は次のとおりです。

((?!word)[^>])+(word)([^<]+) # read all characters, except 
          # '>' until you encounter 'word' 
          # read 'word' 
          # capture all following characters, except '<' 
+0

あなたは '<タグいくつかの属性=「単語」>'私は交換することを必要とするような「言葉」を持っているでしょうタグのパラメータを使用する場合、問題があるでしょうタグ内の単語これはなぜ私が使用している表現を使用している..そして本当に私はマイナス私の質問と一体なぜか分からない? – Husamuddin

+0

私もそのための例を修正しましょう。私はあなたの質問をd​​ownvoteしませんでした。答えや質問を下ろす場合は、説明を与えるべきです。私見では。 –

+0

どのように置換するのでしょうか?あなたがそれを提供したら、私はとても感謝しています。 – Husamuddin

関連する問題