为什么正则表达式尝试进行子匹配?

时间:2014-06-18 19:50:11

标签: c# regex

我是正则表达式的新手,所以如果这是一个微不足道的问题,请耐心等待。我正在关注this 我想看看我的输入是否具有以下模式:

<any number of spaces><one or more of alphanumeric character>;<any number of possible spaces>

如果我的输入有上面的表达式,那么我返回匹配。

我的正则表达式如下:

\s*\w+\s*?;\s*

当我这样做时

Regex.IsMatch(input, pattern, RegexOptions.IgnoreCase)

即使我有"a;"" a;"之类的有效输入,我最终也会收到错误信息。

当我使用RegEx工具检查时,似乎它匹配整个事物,然后它尝试再次找到具有第二个\ s *的子匹配,此时它表示没有子匹配。任何人都可以解释为什么我会得到一个假的?

2 个答案:

答案 0 :(得分:1)

问题是中期:“\ s *?”。你应该在组中阅读正则表达式,所以你有(所有空格都表示组而不是正则表达式的一部分):\ s * \ w + \ s *? ; \ S *

它是怎么回事:\ s *?

你应该有     \ S * \ W +; \ S * 这应该有用。

答案 1 :(得分:1)

以下内容将根据您的需要进行操作。

\s*\w+;\s*

示例:

Console.WriteLine(Regex.IsMatch("a;",    @"\s*\w+;\s*"));  // True
Console.WriteLine(Regex.IsMatch("   a;", @"\s*\w+;\s*"));  // True
Console.WriteLine(Regex.IsMatch("a;   ", @"\s*\w+;\s*"));  // True