在 1 中组合 2 个或多个正则表达式

Posted

技术标签:

【中文标题】在 1 中组合 2 个或多个正则表达式【英文标题】:Combine 2 or more regex in 1 【发布时间】:2020-05-21 01:57:53 【问题描述】:

我有 2 个正则表达式:

    string regex1 = "(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)"; 这将检查给定字符串中的“admin”子字符串,并且不区分大小写。

    string regex2 = "^[^<>?]5,100$"; 这将检查特殊字符(^?) 和 5 到 100 之间的长度。

我想要一个正则表达式,其中两个正则表达式都可以使用一个正则表达式同时验证。

前-

<asp:RegularExpressionValidator ID="RegularExpressionValidator1" runat="server"
    ControlToValidate="txtBox1" ErrorMessage="Validation Failed!"
    ValidationExpression="(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$)">
</asp:RegularExpressionValidator>

<asp:RegularExpressionValidator ID="RegularExpressionValidator2" runat="server"
    ControlToValidate="txtBox2" ErrorMessage="Length Validation Failed!"
    ValidationExpression="^[^<>?]5,100$">
</asp:RegularExpressionValidator>

问。我们能否有一个“RegularExpressionValidator”同时提供上述功能?

【问题讨论】:

请检查:***.com/questions/869809/combine-regexp 感谢 ycansener,甚至您的提及链接也在为我学习。 【参考方案1】:

(?i)(^(?!^.*?admin)(?!^.*?admin[admin\d]).*$) 正则表达式太多余,它等于(?i)^(?!^.*?admin).*$。它基本上匹配任何不包含admin 子字符串的字符串。

^[^&lt;&gt;?]5,100$ 正则表达式不允许在字符串中使用&lt;&gt;?,并设置字符串长度限制。

通过将第一个模式中的 .* 替换为第二个正则表达式 ([^&lt;&gt;?]5,100) 的消耗部分来完成两者的结合:

(?i)^(?!^.*?admin)[^<>?]5,100$

详情

(?i) - 不区分大小写模式开启 ^ - 字符串开头 (?!^.*?admin) - 不允许 admin 子字符串在 0 个或多个字符(换行符除外)之后的任何位置,尽可能少 [^&lt;&gt;?]5,100 - 除了&lt;&gt;? 之外的五到一百个字符 $ - 字符串结束。

【讨论】:

非常感谢 Wiktor Stribiżew,我只是复制了您的答案,它按预期工作:) @Bit2Dev 另见the regex demo online。 嘿@Wiktor Stribiżew,我发现了 1 个问题,上面提到的正则表达式 (?i)^(?!^.*?admin)[^?]5,100$ 在我的 POC,但如果放入所需的项目中,它会在 WebResource.axd 文件中引发错误。 @Bit2Dev 答案中的模式将在服务器端工作,它不会在客户端工作,因为 JS RegExp 不支持内联修饰符。您必须删除 (?i) 并使用 ^(?!^.*?[Aa][Dd][Mm][Ii][Nn])[^&lt;&gt;?]5,100$

以上是关于在 1 中组合 2 个或多个正则表达式的主要内容,如果未能解决你的问题,请参考以下文章

Django中常用的正则表达式

如何优化正则表达式性能?

需要一个包含至少一个数字、零个或多个字母、没有空格、最小/最大的正则表达式

正则 —— (.*)与(.*?)和一些基础的东西

正则表达式

Python:正则表达式*+?的用法