查找匹配两个正则表达式的字符串

时间:2018-02-06 10:01:55

标签: ruby regex

两个正则表达式:

regex_1 = /^A+\S{2}$/
regex_2 = /^AB+\d{1}$/

匹配以下十个字符串:

AB0
AB1
AB2
AB3
AB4
AB5
AB6
AB7
AB8
AB9

有没有办法找到匹配两个正则表达式的字符串?

我有一个正则表达式,它将被切成许多子正则表达式如下。

示例1:

original_regex = /^A+\S{2}$/
sub_regex1 = /^AB+\S{1}$/
sub_regex2 = /^AC+\S{1}$/

示例2:

original_regex = /^598+\S{5}$/
sub_regex1 = /^598A+\S{4}$/
sub_regex2 = /^598AB+\S{3}$/

我想知道是否有任何符合所有子正则表达式的字符串。

我正在考虑将正则表达式转换为字符串并比较最小长度前缀和最小长度后缀,如下所示:

regex_1 = "/^A+\S{2}$/"
regex_2 = "/^AB+\d{1}$/"
regex_3 = "/^AC+\d{1}$/"
minimal_prefix = "/^A"

包含minimal_prefix的任何正则表达式字符串都有一个匹配所有子正则表达式的字符串。我在弄清楚这是否正确。

1 个答案:

答案 0 :(得分:1)

一般快速吗?不。与这些正则表达式对匹配的“所有字符串”是什么:

  • /.*//\d*/? (无限很多!)
  • /\A\d{10}\z//\A[0-8]{10}\z/? (有3,486,784,401!)
  • /\w+\d{2,4}@?([[:punct:]]|\w){2}//(^[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+$)/(我甚至没有试过这个;我的观点是:你可以提供任意复杂的输入!!)

...但是对于简单的方案,例如您实际要求的方案,使用this ruby gem是可行的:

/^A+\S{2}$/.examples(max_group_results: 999) & /^AB+\d{1}$/.examples(max_group_results: 999)
=> ["AB0", "AB1", "AB2", "AB3", "AB4", "AB5", "AB6", "AB7", "AB8", "AB9"]