假设我有以下 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”,我找不到匹配项。
这是为什么?我的正则表达式错了吗?
请您参考如下方法:
您的正则表达式以 ^ 开头并以 $ 结尾 - 这表明它应该只匹配整个字符串。 ^ 匹配行(或字符串)的开头,$ 匹配结尾 - 如果在第一个有效 URL 之后的字符串末尾有更多文本,它将不匹配。
如果您想要字符串的所有匹配部分,请删除 ^ 和 $。
