繁体   English   中英

正则表达式的行尾锚点并不总是有效

[英]Regex end-of-line anchor doesn't always work

我正在开发一个使用正则表达式的ASP .NET(C#)项目,而我在使用行尾锚时遇到了麻烦! 我正在寻找一些文本,我想确保它只出现在字符串的末尾。

这是一些演示我的问题的示例输入。 对于这种情况,我试图在最后匹配“文本”一词。

这段文字是我的示例文字

以下是我尝试过的表达式(使用IgnoreCase选项):

text\z
text\Z
text$

现在这里是疯狂的部分。 这些正则表达式都不适用于我的系统(Windows 8 Pro 64位,VS2010,.NET 4.0)。 我在我的项目中进行了调试,并且我还尝试了Windows 8商店中的“Regex Tester”应用程序。 它不会匹配!

但是,如果我使用在线正则表达式测试程序,例如Derek Slager在他的博客文章中运行在.NET上,或者这个Silverlight在http://regexhero.net/tester/上 ,使用完全相同的模式和输入,它匹配没有问题的“文本”的最后一个实例。

我糊涂了。 我真的需要可靠的字符串匹配,我不知道我做错了什么。

编辑:显然我不能使用编译的正则表达式。 以下是使用项目实际运行的数据的示例:

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();
    }
}

输出

尝试编译正则表达式:不匹配

尝试非编译的正则表达式:匹配

尝试内联正则表达式:匹配

按任意键即可终止。

再次编辑:好吧,我是一个完全白痴。 当我应该使用按位OR来组合正则表达式选项时,我使用按位AND。 编译正则表达式的工作现在很好。

试着用这个:

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

有关详细信息,请参阅: 与C#中的换行符匹配的正则表达式(\\ n)

这是一个直接来自最好的正则表达源之一的引用。

Regex允许使用RegexOptions类型的可选第二个参数。 您可以指定RegexOptions.IgnoreCase作为最终参数,以使正则表达式不区分大小写。 其他选项是RegexOptions.Singleline,它使点匹配换行符和RegexOptions.Multiline,这使得插入符号和美元在主题字符串中的嵌入换行符处匹配

您可能只需要设置该选项即可获得所需内容。 您可以查看页面的其余部分,以获取有关.net和regex的更多信息。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM