3

正規表現を使用する 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 を使用していました。コンパイルされた正規表現の作業は今のところ問題ありません。

4

2 に答える 2

7

これを使用してみてください:

 (\n|\r|\r\n)

詳細については、C# の改行 (\n) に一致する正規表現を参照してください。

于 2012-11-25T13:08:02.833 に答える
2

これは、最高の正規表現ソースの 1 つからの直接の引用です。

Regex では、RegexOptions 型のオプションの 2 番目のパラメーターを使用できます。RegexOptions.IgnoreCase を最後のパラメーターとして指定して、正規表現の大文字と小文字を区別しないようにすることができます。その他のオプションは、ドットを改行に一致 させる RegexOptions.Singleline と、件名の文字列に埋め込まれた改行でキャレットとドルを一致させる RegexOptions.Multilineです。

必要なものを取得するには、そのオプションを設定する必要があるだけかもしれません。.net と正規表現の詳細については、ページの残りの部分を確認してください。

于 2012-11-07T21:54:12.780 に答える