• 締切済み

正規表現で…

以下の文字列を表す正規表現を教えてください>< ;以外の任意の文字列 activate "任意の文字列"任意の文字列 つまり ; arealk activate "algkre" a;relak;lekr arelakjlka activate arekjlk" alkrelak はダメで、 arkejalrkjl activate "arejkal" aekjaljra; はOKです。 ちなみに言語はC#です。

みんなの回答

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

ああ、activateの前は空でもいいのですね。 んじゃこうで ところで#1のパターンでも、#1の補足にあるNGのパターンはNGになりません? using System; using System.Text.RegularExpressions; class X { public static void Main(string[] args) { string[] s = { "; arealk activate \"algkre\" a;relak;lekr", // must be NG "arelakjlka activate arekjlk\" alkrelak", // must be NG "arkejalrkjl activate \"arejkal\" aekjaljra;", // must be OK "arewa;are activate \"arrare\" area", // must be NG "activate \"alekrlk\" arewpo" // must be OK }; // string pat = "^[^;]+ ?activate ?\".+?\".*"; string pat = "^[^;]*activate ?\".+?\".*"; foreach (string item in s) { Console.WriteLine("Try: " + item); if (Regex.IsMatch (item, pat)) Console.WriteLine("--> match"); else Console.WriteLine("--> no match"); } } } Try: ; arealk activate "algkre" a;relak;lekr --> no match Try: arelakjlka activate arekjlk" alkrelak --> no match Try: arkejalrkjl activate "arejkal" aekjaljra; --> match Try: arewa;are activate "arrare" area --> no match Try: activate "alekrlk" arewpo --> match #1のもこれも、""で囲まれた文字列の後がなにもなくてもOKと見なしています。 なにかないとNGにしたいのなら、 "^[^;]*activate ?\".+?\".+" (最後の*を+に変更) で。 すみませんが、これでまだ何かあっても 次の反応は夜遅くになりますのでよろしく。

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

条件に不明確なところがあるんだけど、とりあえず 示されているパターンでは条件を満足します。 using System; using System.Text.RegularExpressions; class X { public static void Main(string[] args) { string[] s = { "; arealk activate \"algkre\" a;relak;lekr", "arelakjlka activate arekjlk\" alkrelak", "arkejalrkjl activate \"arejkal\" aekjaljra;" }; string pat = "^[^;]+ ?activate ?\".+?\".*"; foreach (string item in s) { Console.WriteLine("Try: " + item); if (Regex.IsMatch (item, pat)) Console.WriteLine("--> match"); else Console.WriteLine("--> no match"); } } } Try: ; arealk activate "algkre" a;relak;lekr --> no match Try: arelakjlka activate arekjlk" alkrelak --> no match Try: arkejalrkjl activate "arejkal" aekjaljra; --> match

pepepepepe
質問者

補足

さっそくのご回答ありがとうございます! ただ、説明不足だったようで、もう少し追加させていただきます。 ダメな例 arewa;are activate "arrare" area OKな例 activate "alekrlk" arewpo