我正在开发一个使用正则表达式的ASP .NET(C#)项目,我遇到了行尾锚点问题!我正在寻找一些文本,我想确保它只出现在字符串的末尾。
这是一些演示我问题的示例输入。对于这种情况,我试图在最后匹配“text”这个词。
此文字是我的示例文本
以下是我尝试过的表达式(使用IgnoreCase选项):
text\z
text\Z
text$
现在这里是疯狂的部分。这些正则表达式都不适用于我的系统(Windows 8 Pro 64位,VS2010,.NET 4.0)。我在我的项目中进行了调试,并且我还尝试了Windows 8商店中的“Regex Tester”应用程序。它不会匹配!
但是,如果我使用在线正则表达式测试程序,例如在his blog post运行在.NET上的Derek Slager,或在http://regexhero.net/tester/运行的Silverlight,使用完全相同的模式和输入,它匹配“文本”的最后一个例子没有问题。
我很困惑。我真的需要可靠的字符串结尾匹配,我不知道我做错了什么。
编辑:显然我不能使用编译的正则表达式。以下是使用项目实际运行的数据的示例:
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。编译正则表达式的工作现在很好。
答案 0 :(得分:7)
答案 1 :(得分:2)
这是一个直接来自最好的正则表达源之一的引用。
Regex允许使用RegexOptions类型的可选第二个参数。 您可以指定RegexOptions.IgnoreCase作为最终参数 使正则表达式不敏感。其他选择是 RegexOptions.Singleline导致点匹配换行符和 RegexOptions.Multiline导致插入符号和美元匹配 主题字符串中嵌入的换行符。
您可能只需要设置该选项即可获得所需内容。您可以查看the rest of the page以获取有关.net和regex的更多信息。