Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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#正则表达式中的自定义字符类_C#_Regex - Fatal编程技术网

C#正则表达式中的自定义字符类

C#正则表达式中的自定义字符类,c#,regex,C#,Regex,有没有办法在C#regex中定义自定义字符类 在flex中,它以非常明显的方式完成: DIGIT [0-9] %% {DIGIT}+ {printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) );} 如中所述,在PHP中,定义自定义字符类的工作方式如下: (?(DEFINE)(?<a>[acegikmoqstz@#&]))\g<a>(?:.*\g<a>){2} (?(定义)(?[

有没有办法在C#regex中定义自定义字符类

在flex中,它以非常明显的方式完成:

DIGIT    [0-9]
%%
{DIGIT}+    {printf( "An integer: %s (%d)\n", yytext, atoi( yytext ) );}

如中所述,在PHP中,定义自定义字符类的工作方式如下:

(?(DEFINE)(?<a>[acegikmoqstz@#&]))\g<a>(?:.*\g<a>){2}
(?(定义)(?[acegikmoqstz@#&])\g(?:.*\g){2}
有没有一种方法可以在c#中实现此结果,而不必每次使用完整的字符类定义?

没有,c#中不支持。将为您提供.NET正则表达式引擎的良好概述。请注意,没有什么能真正阻止您定义变量并使用它们构造正则表达式字符串:

var digit = "[0-9]";
var regex = new Regex(digit + "[A-Z]");

自定义字符类在C#中不受支持,但您可以使用并获得类似的效果

.NET定义了与Unicode字符类别(如数学或希腊符号)相对应的s。可能有一个块已经符合您的要求

字符类减法允许将一个类或块中的字符从更广泛的类中排除。语法是:

[ base_group -[ excluded_group ]]
从链接文档复制的以下示例匹配除空格、希腊字符、标点符号和换行符以外的所有Unicode字符:

[\u0000-\uFFFF-[\s\p{P}\p{IsGreek}\x85]]

@罗琳:这是一个同样的问题,但重点是:如何用C#实现(如果可能)。我重新投票的原因:链接副本中的答案根本没有涉及C#,它明确地只涉及Java和PHP。这里给出的解决方案不适用于c#(@Rawling)@HugoRune好的一点,我认为这两个答案都只是特定于语言的字符串连接版本,但PHP版本做了一些特殊的事情。这里有一个答案,我希望你所吸引的大多数答案都是相同的。@Rawling是的,我也不认为存在更好的解决方案。但我在谷歌上搜索这个问题,这里的这个问题似乎是唯一适用的结果,所以这里的明确答案应该对未来的访问者有用,即使是否定的答案。也许可以使用命名块和类减法来获得同样的效果,或者,可能存在已匹配所需字符的命名块