正規表現を使用する ASP .NET (C#) プロジェクトに取り組んでいますが、行末アンカーに問題があります。テキストを探していますが、それが文字列の末尾にのみ出現するようにしたいと考えています。
私の問題を示すサンプル入力を次に示します。この場合、最後に「テキスト」という単語を一致させようとしています。
このテキストは私のサンプルテキストです
そして、これが私が試した式です(IgnoreCaseオプションを使用):
text\z
text\Z
text$
ここがクレイジーな部分です。これらの正規表現はどれも私のシステム (Windows 8 Pro 64 ビット、VS2010、.NET 4.0) では機能しません。私は自分のプロジェクトでデバッグを行い、Windows 8 ストアの「Regex Tester」アプリも試しました。似合わない!
ただし、オンラインの正規表現テスターを使用すると、たとえば、.NET で実行される Derek Slager のブログ投稿にあるものや、 http: //regexhero.net/tester/にあるこの Silverlight のものとまったく同じパターンと入力を使用すると、一致します。問題のない「テキスト」の最終インスタンス。
よくわかりません。信頼性の高い文字列の終わりの一致が本当に必要ですが、何が間違っているのかわかりません。
編集:どうやら、コンパイルされた正規表現を使用できないようです。プロジェクトが実際に実行されるデータを使用した例を次に示します。
class Program
{
static void Main(string[] args)
{
string url = "http://192.168.0.113/MidlandGIS/rest/services/Osceola_Assessor_Data/MapServer/?f=pjson";
string pattern = @"mapserver/\?f=(json|pjson)$";
Regex myRegex = new Regex(pattern, RegexOptions.IgnoreCase & RegexOptions.Compiled);
Console.Write("Trying compiled regex: ");
if (myRegex.IsMatch(url))
Console.WriteLine("Match");
else
Console.WriteLine("No match.");
myRegex = new Regex(pattern, RegexOptions.IgnoreCase);
Console.Write("Trying non-compiled regex: ");
if (myRegex.IsMatch(url))
Console.WriteLine("Match");
else
Console.WriteLine("No match.");
Console.Write("Trying inline regex: ");
if (Regex.IsMatch(url, pattern, RegexOptions.IgnoreCase))
Console.WriteLine("Match");
else
Console.WriteLine("No match");
Console.Write("Press any key to terminate.");
Console.ReadKey();
}
}
出力
コンパイルされた正規表現を試しています: 一致しません
コンパイルされていない正規表現を試す: Match
インライン正規表現を試す: Match
終了するには何かキーを押してください。
もう一度編集してください: OK、私は完全な馬鹿です。正規表現オプションを組み合わせるためにビットごとの OR を使用する必要があるときに、ビットごとの AND を使用していました。コンパイルされた正規表現の作業は今のところ問題ありません。