2011-06-21 15 views
1

私は現在(少し)ブロッキングの問題に直面しています。私は正規表現を使って部分文字列を互いに置き換えたいと思っています。しかしここにトリックがあります:私は正規表現で吸う。正規表現:文字列を置換する

Regex.Replace(contenu, "Request.ServerVariables("*"))", 
         "ServerVariables('test')"); 

基本的に私は、テスト「で 『パターンとして「{*}。』。私が試した」が、それは動作しませんとの間にあるものは何でも交換したいと思います。

をあなたは私を与えることができますいくつかのヒントは、私はそれを感謝し

答えて

3

世話をする必要があるいくつかの問題があります。

  1. 正規表現(.、括弧、引用符)に特殊文字を使用しています。スラッシュでエスケープする必要があります。文字列の先頭に@という接頭辞を付けないと、C#の文字列リテラルに入っているので、スラッシュを別のスラッシュでエスケープする必要があります。この場合、エスケープルールは異なります。
  2. "任意の数の任意の文字"と一致する式は.*です。この場合、引用符で囲まれていない任意の数の文字([^"]*)をマッチさせたいでしょう。
  3. 上記の(1)とは対照的に、置換文字列は正規表現ではないので、スラッシュを入れたくありません。
  4. 置き換えの戻り値をどこかに格納する必要があります。

最終結果は

var result = Regex.Replace(contenu, 
          @"Request\.ServerVariables\(""[^""]*""\)", 
          "Request.ServerVariables('test')"); 
1

を正規表現の私の知識に純粋に基づいて、(それらはC#で行われていないか)、あなたが望むパターンが考えられます:!

"[^"]*" 

すなわち - 「一致しますそれから、 "ママTCH別の「

あなたの正規表現のパーサは実際にそれらを一致させるために二重引用符をエスケープする必要があるかもしれません...それは私はあなたが "をできないようにする程度C#

+1

デッド右:あなたはこのクールなエディタを使用して、この正規表現をテストすることができます。エスケープされたバージョンは、Regex.Replace(Contenu、Request \\。ServerVariables \\(\ "[^ \"] * \ "\\)"、 "Request.ServerVariables(\" test \ ") "、" @ "Request.ServerVariables(" "test" ")");または 'Regex.Replace(Contenu、@" Request \ .ServerVariables \( "[" "* – LukeH

0

てみてくださいを知らないものです。* '正規表現では、通常、あなたは括弧で囲まれていない、[^ "] +引用符で囲まれていないか、[([^)] +)などの他の文字を避けることで得たいものを見つけることができます。だからあなたは[0]であなたにすべてを与えるはずの "([^"] +) "、次に[1]で"テスト "を見つけるでしょう。

また、私はそう思う。

0

タリンEasts正規表現*が含まれています。

ところで
"[^"]" 

:それは任意の値のプレースホルダである場合は、それを削除する必要がありhttp://rubular.com/r/1MMtJNF3kM

関連する問題