2017-12-15 13 views
2

正確な接頭辞と接頭辞のワイルドカードとの照合を行いたいのですが、特定のタグに囲まれてはならないという条件があります。正規表現に一致するタグがいくつかありません

例えば:一致する単語がtestであれば、正規表現は testtestingtestertesting.aspxと一致する必要がありますが、私が来たtest

それは接頭辞でtest</x>testing</x>tester</x>や他の言葉と一致してはなりません正規表現で一致するのはtest</x>です。

string regex = string.Format("\\b{0}(\\S)*(?!</x>)", "test"); 

私の正規表現の修正に誰か助けてもらえますか?

+0

「string regex = string.Format(@ "\ b {0}(?! –

+0

_タグの中にxの後ろに空白があり何とか投稿すると消えないタグを追加する方法がわからないのでバッククイック( '')を使います。 text ' –

+0

@WiktorStribiżewもう一度質問を更新しましたが、それは' testing 'と一致しないはずです。式は1番目には機能しますが、2番目には失敗しますか?他に何がありますか? – KingJames

答えて

2

\btest(\S)*(?!</x>)パターンtest</x>に一致\btesttest始まる語を検出するため、次に一致繰り返し任意0+の非空白文字を捕捉し、次に何</x>は、現在位置のすぐ右には存在しないかどうかをチェック。 (\S)*</x>と一斉に一致しますので、負の先読みは</x>の後に正規表現インデックスがすでに置かれている場合には</x>をチェックし、trueを返し一致が成功します。単語 - -

  • \bに一致する原子団

    • (?>\btest[^<\s]*)

      regex demo

      は今、それは次のように一致します参照してください

      string regex = string.Format(@"(?>\b{0}[^<\s]*)(?!</x>)", "test"); 
      // or, beginning with C#6 
      // var regex = [email protected]"(?>\b{SearchWord}[^<\s]*)(?!</x>)"; 
      

      を使用することができます境界

    • test - 検索用語
    • [^<\s]* - 0+ <以外の文字や空白
  • (?!</x>)から</x>チャー配列が現在位置のすぐ右にある場合に一致を失敗負先読み
+0

'testing' – KingJames

+0

と一致しないことを確認するにはどうすれば 'testing'と一致するはずですが' testing' – KingJames

+0

@更新された回答を参照してください。 –

関連する問題