Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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语言中预定义集合的模式匹配#_C#_Regex_.net 4.0 - Fatal编程技术网

C# c语言中预定义集合的模式匹配#

C# c语言中预定义集合的模式匹配#,c#,regex,.net-4.0,C#,Regex,.net 4.0,我刚开始学习模式匹配 var stringToBeProcessed = "***???^^^^"; 我必须检查此字符串是否只包含[*,?,^] 此字符串不应连续出现5个问号或5颗星或5^(但它们可以分布出现)。 (即)*或?????或^^^^无效 无效测试用例: **???**?^^//问题连续重复5次,因此无效 %*//存在除[*,?,^]以外的符号。因此无效 编辑: 我使用string.Contains()方法检查上述模式 我所做的就是: string.contains("*****")

我刚开始学习模式匹配

var stringToBeProcessed = "***???^^^^";
  • 我必须检查此字符串是否只包含[*,?,^]

  • 此字符串不应连续出现5个问号或5颗星或5^(但它们可以分布出现)。 (即)*或?????或^^^^无效

    无效测试用例:

  • **???**?^^//问题连续重复5次,因此无效

    %*//存在除[*,?,^]以外的符号。因此无效

    编辑:

    我使用string.Contains()方法检查上述模式

    我所做的就是:

    string.contains("*****") || string.contains("^^^^^") || string.contains("?????") is true => is invalid
    

    上述方法不好,因为如果允许的符号变大,那么我的代码也会变大。有没有优化但简单的例子?
    也许在正则表达式中有更好的方法

    您可以使用如下正则表达式:

    ^(([*?^])(?<!\2{5}))+$
    

    +谢谢p.s.w.g.但是,你能帮我介绍一下吗?然后我可以推出我的:)。[比如这有什么作用?
    (?)?(我能理解[*?^]表示
    允许的字符
    @now他不应该被命名。请参阅我更新的答案以获得更详细的解释并提供一些参考。只是一句警告,
    [*?^]
    [^?*]不一样
    ,因为
    ^
    在字符类中有特殊的含义。非常感谢您的指导。回答得很好。将浏览参考资料:)@now他不必命名。很高兴我能帮忙。快乐编码:)
    ^(([*?^])(?<!\2{5}))+$
    
    Regex.IsMatch("***???^^^^", @"^(([*?^])(?<!\2{5}))+$");    // true
    Regex.IsMatch("***???^^^^^", @"^(([*?^])(?<!\2{5}))+$");   // false