【发布时间】:2010-09-18 07:16:00
【问题描述】:
我不明白,为什么下面的正则表达式:
^*$
匹配字符串“127.0.0.1”?使用Regex.IsMatch("127.0.0.1", "^*$");
使用 Expresso,它不匹配,这也是我所期望的。使用表达式 ^.*$ 确实匹配字符串,这也是我所期望的。
从技术上讲,^*$ 应该多次匹配字符串/行的开头,然后是字符串/行的结尾。似乎 * 被隐式视为.*
我错过了什么?
编辑: 运行以下命令以查看问题示例。
using System;
using System.Text.RegularExpressions;
namespace RegexFubar
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine(Regex.IsMatch("127.0.0.1", "^*$"));
Console.Read();
}
}
}
我不希望 ^*$ 匹配我的字符串,我想知道为什么它 确实 匹配它。我认为表达式应该导致抛出异常,或者至少是不匹配。
编辑2: 消除任何混乱。我写这个正则表达式并不是为了让它匹配“127.0.0.1”。我们应用程序的用户输入了表达式并想知道为什么它不应该匹配字符串。看了之后,我无法解释为什么它匹配 - 特别是因为 Expresso 和 .NET 似乎处理它的方式不同。
我猜这个问题的答案是由于 .NET 实现避免抛出异常,即使认为它在技术上是一个不正确的表达式。但这真的是我们想要的吗?
【问题讨论】:
-
你的正则表达式应该匹配什么?您的正则表达式没有多大意义。