2012-01-17 9 views
1

すべてのケースで正しい一致が見つかりません。出力があるべき 私はケース1 regex match 2 cases

のようなものを持っている場合たとえば、 ための引用符で囲まれている何かの文字列(ここでは私の例では## XYXを##)キャッチしたい)

   <picture href="hello" ##xyz##>##xyz##</picture> 

それらのどれも引用符で囲まれていないので、一致するものは見つかりません。私は一致させたい

ケース2)

  <picture href="##xyz##" dbhdfbhg="dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd"> 

のような異なるケースの何かを持っている場合

両方それらの両方として## XYZを##持っている場合は、引用符である

ケース3)

   <picture href="##xyz##"> 
        ##xyz## 
        </picture> 

正規表現では、最初の1つだけがn 2番目のもの..

私は( ")([^"]のようなものを試しました。 )?(## xyz ##)([^ "]。)?(") 出力が間違っています。ケース3の は、正規表現で複数行オプションを使用していても、2番目のものをキャッチしています。いくつか助けてもらえますか? コーディングにC#を使用しています

+1

正規表現を実行する場所にコードを投稿することはできますか?FireFoxの正規表現テスターのアドオンで、ケース3例。正規表現をC#文字列にエンコードする際に問題が発生することがあります(引用符を削除するなど)。 –

+0

'(")([^ "] *)(## xyz ##)([^"] *)( ")'とは? –

答えて

0

次のようなLINQPadスニペットを試すことができます。正規表現は、一致する引用符を見つけるために、先読み(?=を使用し、そのテキストセグメント内## XYZ ##を一致させようとします:これは最初の文字列で、次の正しい出力(すなわち2試合を与え、

var text = "<picture href=\"##xyz##\" dbhdfbhg=\"dbfdhfbhgbt fgkg ##xyz## hdjvffhgfhd\">"; 
var text1 = @"<picture href=""##xyz##""> 
        ##xyz## 
        </picture>"; 

var regex = new Regex("\"(?=[^\"]+)[^#]*##xyz##[^\"]*\""); 

var matches = regex.Matches(text); 
var matches1 = regex.Matches(text1); 
matches.Dump(); 
matches1.Dump(); 

第二の唯一の1試合):nregex.com上

enter image description here

1

、私が得たすべての例で動作するには、次

\"([^"])*(##xyz##)([^"])*\" 
0

xmlの属性を解析しようとしている場合は、#xyz ##を引用符で囲むだけでは検索できません。例えば:

<a i="2"/> ##xyz## <a i="##xyz##"/> 

あなたの正規表現がマッチします:私はあなたがする必要はありません\「を使用しますが、それ

\"[^\"<>]*(##xyz##)[^\"<>]*\" 

注:

"/> ##xyz## <a i=" 

をあなたのような何かを試すことができます