如何匹配启动索引处的正则表达式?

问题描述:

如何创建开始匹配的正则表达式如何匹配启动索引处的正则表达式?

换句话说:

什么是\A它说,“比赛在搜索的开始,即使它不是在主字符串的开头相当于”?

new Regex(@"\A\n").IsMatch("!\n", 1); // Should be true, but is false 
+0

@NullUserExceptionఠ_ఠ:我将会在很长的一段时间内做这件事,所以这会非常昂贵。 – Mehrdad

什么你要找的是\G

new Regex(@"\G\n").IsMatch("!\n", 1); // It's twue, it's twue! 

这是一个让我吃惊,其实。我知道\G,但它通常被描述为匹配输入开始或最近成功匹配结束的锚点,这两者在这里都不适用。如果这是一个.NET创新,他们应该更多地讨论它;它看起来可能非常方便。

编辑:想想吧,Java的find(int)确实以同样的方式工作 - 我甚至已经广泛使用它。但后来他们在Java 5中添加了“regions”API,它提供了更好的控制,并且我忘记了这个习惯用法。我从来没有想过在.NET中寻找它。

+0

我不能相信这是真的! +1 – Mehrdad

+0

+1哇,你找到它了!从[.NET 1.1](http://msdn.microsoft.com/en-us/library/h5181w5w(v = VS.71).aspx) – NullUserException

OOOOH我刚刚想起一件事我读到〜4 - 5年前在关于Regex.Match一本书......

的重载不规矩我们希望他们的方式!

超载

Regex.Match(string input, int index, int length) 

指定搜索,而过载

Regex.Match(string input, int index) 

只是决定在搜索应该开始一个

(它省去了一个案例开始在任意位置在,我猜。)

希望这是启发人们...

+0

+1开始,它看起来就已经存在了。是的,结果是新的正则表达式(@“\ A \ n”)匹配(“!\ n”,1,2)。成功也是双重的。那些棘手的小恶魔! –