Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Regex:字符串长度和以模式开头的组合_C#_Regex - Fatal编程技术网

C# Regex:字符串长度和以模式开头的组合

C# Regex:字符串长度和以模式开头的组合,c#,regex,C#,Regex,我想检查字符串是否正好包含11个字符,而不是更多或更少,以及它是否以数字“09”开头,因此我的模式是: Regex rg = new Regex(@"^(?=09)(?={11})"); Console.WriteLine(rg.IsMatch("09123456789")); ^(?=09)工作正常,但当我添加第二部分时,(?={11})将引发异常。正确的模式是什么?您可以在没有正则表达式的情况下实现: if (s.Length == 11 && s.StartsWith("

我想检查字符串是否正好包含11个字符,而不是更多或更少,以及它是否以数字“09”开头,因此我的模式是:

Regex rg = new Regex(@"^(?=09)(?={11})");
Console.WriteLine(rg.IsMatch("09123456789"));

^(?=09)
工作正常,但当我添加第二部分时,
(?={11})
将引发异常。正确的模式是什么?

您可以在没有正则表达式的情况下实现:

if (s.Length == 11 && s.StartsWith("09") && s.All(Char.IsDigit))
请参阅(不确定您只需要数字。如果不需要,请删除
s.All(Char.IsDigit)

请注意,
^(?=09)(?={11})
匹配字符串位置的开头(使用
^
),然后检查字符串是否以
09
子字符串开头,然后在字符串开头需要
{11}
文字字符序列。由于
09
!=<代码>{1

如果需要正则表达式,可以使用

\A09[0-9]{9}\z
或者,要匹配的不仅仅是数字:

\A09.{9}\z
在哪里

  • \A
    -断言字符串的开头
  • 09
    -匹配文字字符序列
    09
  • {9}
    -匹配除LF以外的9个字符
  • \z
    -字符串的最末端
您可以使用

Regex rg = new Regex(@"^09.{9}$", RegexOptions.Compiled);
bool CheckStringRegex(string str)
{
    return rg.IsMatch(str);
}
但我建议用更简单的方式,不使用正则表达式

bool CheckString(string str)
{
    return str.Length == 11 && str.StartsWith("09");
}
怎么样
^(?=09)\w{11}$

演示


有效字符串的模式

为什么不直接使用
^09.{9}$
?@SebastianProske denn ich habe dass nicht gewust;)请将其作为答案发布,并说明字符“$”是什么,这样我可以将您的答案标记为最佳:)
$
标记行尾,如
^
标记行尾。实际上,出于验证目的,使用
\z
而不是
$
new Regex(@"^09[0-9]{9}$");