我想测试一个正则表达式是否匹配特定索引处的字符串的一部分(并且仅从该特定索引开始).例如,给定字符串"one two 3 4 five",我想知道,在索引8处,正则表达式[0-9] +将匹配"3".RegularExpression.IsMatch和Match都采用起始索引,但是如果需要,它们都将搜索字符串的其余部分以进行匹配.
string text="one two 3 4 five";
Regex num=new Regex("[0-9]+");
//unfortunately num.IsMatch(text,0) also finds a match and returns true
Console.WriteLine("{0} {1}",num.IsMatch(text, 8),num.IsMatch(text,0));
Run Code Online (Sandbox Code Playgroud)
显然,我可以检查结果匹配是否从我感兴趣的索引开始,但是我会在大字符串上执行此操作很多次,所以我不想浪费时间在字符串中搜索匹配项.另外,我不会事先知道我将实际测试字符串的正则表达式.
我不想:
我想使用任意用户提供的语法解析潜在的大型用户提供的文本正文.语法将以BNF或类似PEG的语法定义,终端将是字符串文字或正则表达式.因此,我需要检查字符串的下一部分是否与语法驱动的任何潜在终端匹配.
Jon*_*eet 12
如何使用Regex.IsMatch(string, int)以\G(以"最后一场比赛开始")开头的正则表达式?
这似乎有效:
using System;
using System.Text.RegularExpressions;
class Test
{
static void Main()
{
string text="one two 3 4 five";
Regex num=new Regex(@"\G[0-9]+");
Console.WriteLine("{0} {1}",
num.IsMatch(text, 8), // True
num.IsMatch(text, 0)); // False
}
}
Run Code Online (Sandbox Code Playgroud)