如何在正则表达式中写“and”
如何在正则表达式中写“and”
这个问题已经有答案了:
如何在正则表达式中编写 \"and\"。就像我们可以使用管道符号 | 编写 \"or\" 一样,是否有一种方法可以编写 \"and\"
我有
- REGEX1:
^(?!([0-9])\\1{2}[-. ]*\\1{3}[-. ]*\\1{4}$)
,它验证除了数字111-111-1111或111.111.1111之外的任何内容。 - REGEX2:
^\\(?([0-9]{3})\\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$
验证如 784-223-4567 的数字。
我希望仅当满足REGEX1 && REGEX2条件时,数字字符串才有效
admin 更改状态以发布 2023年5月22日
默认的正则表达式标准(由Kleene定义)没有办法写"and",它只有连接、析取和Kleene星号。但是您可以多次应用正则表达式引擎。例如:
grep "regex1" < file | grep "regex2"
因此使用管道,第一个grep
过滤所有符合第一个正则表达式的行,第二个grep
将结果过滤得更深。
如果您使用了正则表达式的扩展版本(具有正向前瞻),您可以实现and模式:
(?=regex1)(?=regex2)regex3
Perl和大多数其他P语言支持此模式。但是大多数其他语言并不支持。
编辑:根据您的评论,并使用第二个模式,regex读取:
^(?=(?!([0-9])\1{2}[-. ]*\1{3}[-. ]*\1{4}$))\(?([0-9]{3})\)?[-. ]?([0-9]{3})[-. ]?([0-9]{4})$