假设我有一个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”并获得我的第三次成功比赛。
但是,如果我只输入“http://www.cnn.com www.cnn.com cnn.com”,我就没有匹配。
这是为什么?我的正则表达式错了吗?
答案 0 :(得分:4)
您的正则表达式以^
开头,以$
结尾 - 这表示它应该只匹配整个字符串。 ^
匹配行(或字符串)的开头,$
匹配结尾 - 如果在第一个有效URL之后字符串末尾有更多文本,则它将不匹配。
如果您想要字符串的所有匹配部分,请移除^
和$
。