1

C# コンソール アプリの次のコードがあるとします。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;

namespace stupidconsoleapp
{
    class Program
    {
        static void Main(string[] args)
        {
            Regex regx = new Regex(@"^(?:https?://)?(?:[\w]+\.)(?:\.?[\w]{2,})+$");

            string test = Console.ReadLine();

            foreach (Match match in regx.Matches(test))
                Console.WriteLine("Match: " + match.Value);

            Console.WriteLine("Press any key to exit.");

            Console.ReadKey();
        }
    }
}

「http://www.cnn.com」と入力すると、このフレーズが一致したことがわかります。もう一度実行して「www.cnn.com」と指定すると、再び一致します。もう一度実行して「cnn.com」と指定すると、3 回目の一致が得られます。

しかし、「http://www.cnn.com www.cnn.com cnn.com」と入力しただけでは、一致するものはありません。

どうしてこれなの?私の正規表現は間違っていますか?

4

1 に答える 1

4

あなたの正規表現はで始まり、^で終わります$- これは、文字列全体にのみ一致する必要があることを示しています。は^、行 (または文字列) の先頭と$末尾に一致します。最初の有効な URL の後に文字列の末尾にさらにテキストがある場合、一致しません。

文字列の一致するすべてのセクションが必要な場合は、 と を削除^$ます。

于 2012-08-27T21:21:35.553 に答える