如何在正则表达式中写“and”

11 浏览
0 Comments

如何在正则表达式中写“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日
0
0 Comments

如果您能使用否定,可以执行以下操作:

Not( (not(a) | (not(b))

0
0 Comments

默认的正则表达式标准(由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})$

regex101演示

0