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 = "***???^^^^";
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