C#Regex捕获额外参数

时间:2015-10-08 19:22:12

标签: c# .net regex

我正在使用.NET的正则表达式作为我大学任务的一部分(编写编译器)。我发现了一个有趣的警告,这让我疯狂。

我有这个正则表达式模式:\A(?:(func)[^\w\d]*|(func)\z)

当我尝试匹配字符串"func sum(a, b)\n...时,生成的Match对象在CaptureCollection中有一个包含字符串"func "的项。

为什么我要将空格与我的关键字一起使用?

3 个答案:

答案 0 :(得分:4)

你在谈论第0项。索引0处的项始终是整个匹配项。以下项目是捕获的组。

您获得了(func)[^\w\d]*部分的匹配,[^\w\d]*抓住了您在结果中看到的空白。

答案 1 :(得分:1)

由于[^\w\d]*部分与空格字符匹配,如果没有它,则仅提供func。将其加入THIS

答案 2 :(得分:0)

你试图在"func" [^\w\d]*之后立即取消单词或数字的字符组,空白符合条件。

您还可以使用*指定任意数量的非单词和非数字,解释与"func"一起捕获的几个空格。

我希望能回答你关于为何捕捉空白的问题。

我不确定你的确切目标是什么,所以这里有一些例子:

此语句仅与"func"之后的任何字词匹配:\A(?:(func)[\w\d]*|(func)\z)

此语句在EACH行的开头和整个字符串的结尾处匹配"func"^func|func\z

此语句在整个字符串的开头和整个字符串的结尾处匹配"func"\Afunc|func\z

您可以在此处找到快速参考页:Regular Expression Language - Quick Reference