3

我正在开发一个使用正则表达式的 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();
    }
}

输出

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

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

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

按任意键终止。

再次编辑:好的,我是个十足的白痴。当我应该使用按位或来组合正则表达式选项时,我使用了按位与。现在编译正则表达式的工作就好了。

4

2 回答 2

7

尝试使用这个:

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

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

于 2012-11-25T13:08:02.833 回答
2

这是直接来自最好的正则表达式来源之一的报价。

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

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

于 2012-11-07T21:54:12.780 回答