如何在开始索引处匹配正则表达式?

Meh*_*dad 12 .net c# regex

如何创建一个开始匹配开始搜索的正则表达式?

换一种说法:

等价的是什么\A,"在搜索开始时匹配,即使它不在主字符串的开头"?

new Regex(@"\A\n").IsMatch("!\n", 1);    // Should be true, but is false
Run Code Online (Sandbox Code Playgroud)

Ala*_*ore 16

你在寻找的是\G:

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

实际上,这对我来说是一个惊喜.我知道\G,但它通常被描述为匹配输入开始或最近成功比赛结束的锚点,这两点都不适用于此.如果这是一项.NET创新,那么它们应该更加喧嚣; 看起来它可能非常方便.

编辑:想想看,Java find(int)确实以同样的方式工作 - 我甚至广泛使用它.但后来他们在Java 5中添加了"regions"API,它提供了更好的控制,我忘了这个成语.我从未想过要在.NET中寻找它.


Meh*_*dad 5

哦,我只是想起了大约 4-5 年前我在一本关于Regex.Match……的书中读过的东西。

重载的行为不像我们期望的那样!

超载

Regex.Match(string input, int index, int length)
Run Code Online (Sandbox Code Playgroud)

指定要搜索的子字符串,而重载

Regex.Match(string input, int index)
Run Code Online (Sandbox Code Playgroud)

只是规定搜索应该哪里开始

(我猜,它忽略了从子字符串中的任意位置开始的一种情况。)

希望这对人们有所启发......