合并Regexp?
收集用户输入的各种条件后,如合并Regexp?,regex,Regex,收集用户输入的各种条件后,如 开头为:/(^@)/ 以:/(@$)/ 包含:/@/ 不包含 若要在用户输入多个条件时生成单个正则表达式, 我将它们与“|”组合,因此如果给定的1和2变成/(^@)|(@$)/ 到目前为止,这种方法有效,但是 我无法正确确定,第4个条件的正则表达式应该是什么?用这种方式合并正则表达式有效吗 更新:@(用户输入)将不相同 有两种情况,而不是全部四种情况 条件总是存在的,但它们可以 是的,将来我可能需要更多 像“是”和“是”这样的条件 完全不是“等等”,所以我更好奇
/(^@)/
/(@$)/
/@/
“|”
组合,因此如果给定的1和2变成/(^@)|(@$)/
到目前为止,这种方法有效,但是
我无法正确确定,第4个条件的正则表达式应该是什么?用这种方式合并正则表达式有效吗
更新:@(用户输入)将不相同 有两种情况,而不是全部四种情况 条件总是存在的,但它们可以 是的,将来我可能需要更多 像“是”和“是”这样的条件 完全不是“等等”,所以我更好奇 要知道这种方法是否可以扩展 此外,还可能存在用户输入问题 清理,以便正则表达式正确转义,但是 这一点现在被忽略了 不包含@:/(^[^@]*$)/
如果组合的预期结果是其中任何一个匹配会导致整个regexp匹配,则组合有效。如果字符串不能包含
@
,则每个字符必须是@
之外的另一个字符:
/^[^@]*$/
这将匹配不包含@
的任何长度的字符串
另一个可能的解决方案是反转
/@/
的布尔结果。根据我对regex的经验,您确实需要关注您正试图匹配的内容,而不是不匹配的内容
比如说
\d{2}
[1-9][0-9]
第一个表达式将匹配任意2个数字…第二个表达式将匹配1到9之间的1个数字和1个数字-任意数字。因此,如果键入07,第一个表达式将验证它,但第二个表达式不会验证它
有关高级参考,请参见此:
编辑:
^((?!我的字符串)。*$
是的正则表达式,不包含“我的字符串” 在一个正则表达式中,将第四个选项的正则表达式与其他任何选项组合都不起作用。4+1表示字符串以@开头或根本不包含@。要做到这一点,您需要两个单独的比较。条件将一起进行or或AND运算吗
Starts with: abc
Ends with: xyz
Contains: 123
Doesn't contain: 456
第四种选择可能看起来很奇怪,但这就是在正则表达式中表示“不包含”的方式。顺便说一下,备选方案的顺序并不重要;这实际上是相同的正则表达式:
/xyz$|^(?:(?!456).)*$|123|^abc/
和版本更复杂。每个正则表达式匹配后,匹配位置必须重置为零,以便下一个正则表达式可以访问整个输入。这意味着所有条件都必须表示为lookaheads(从技术上讲,其中一个条件不必是lookahead,我认为它以这种方式更清楚地表达了意图)。最后一个*$
完成匹配
/^(?=^abc)(?=.*xyz$)(?=.*123)(?=^(?:(?!456).)*$).*$/
然后有可能出现组合And和OR条件——这才是真正有趣的开始D1+2+4条件:开始|结束,但不在中间
/^@[^@]*@?$|^@?[^@]*@$/
这几乎是一样的:
/^@?[^@]*@?$/
但是这一个匹配任何不带@的字符串,示例“my name is hal9000”您能否使用上述建议提供有关如何匹配“不包含”条件的更多详细信息。我假设您想要一个“不包含”某些内容的表达式(不清楚您希望表达式不包含什么内容)。我的建议是,如果您不希望表达式的第一个位置包含数字0,那么您将如何操作,在这种情况下,您将第一个位置的数字限制为1-9。不太清楚你所说的“不包含”是什么意思。不包含什么?请澄清,以便我们能够帮助您。我的回答更为笼统。若那个对你们并没有帮助,那个么很抱歉。更新:合并正则表达式的目的是将if条件减少为single。因为这个正则表达式将匹配大量的字符串。你说的“不包含”是什么意思?如果用户输入的是“酷”字符串不包含那个词意味着它匹配。你们真的需要正则表达式吗?或者一个简单的字符串搜索就足够了吗?我想不出把上面的多个搜索条件压缩成一个不带正则表达式的条件。有其他方法吗?@对于两个条件来说是不一样的,并且并非所有四个条件都始终存在,但它们可以存在,而且将来我可能需要更多的条件,如“完全正确”和“完全不正确”等。所以,我更想知道这种方法是否可以扩展?是的,我现在同意。但是谢谢你把它放在这里。组合AND和OR不适合我。:)我尝试了最后一个和regex,我注意到它有一个语法错误,在最后有一个额外的“)”。我删除了这个字符,但正则表达式似乎没有按预期工作,不知道我做错了什么?我正在使用.Net进行测试。它实际上是倒数第二个不属于那里的
)
。一旦这个问题解决了,它就不起作用了,因为它里面没有任何东西会消耗角色,只是看起来像头。我可以让最后一部分不是前瞻性的,但为了清晰起见,我宁愿在结尾添加一个*
。我现在正在修理它;谢谢你提醒我。
/^@?[^@]*@?$/