regex 如何正确地为一组词指定量词?

gijlo24d  于 2023-01-27  发布在  其他
关注(0)|答案(2)|浏览(107)

表具有包含以"-"分隔的ID列表的字段。
示例:559-3319-3537-4345-29923
我需要使用regex检查至少使用4个指定标识符的行
示例:在插入到DB之前,我需要检查值559 - 3319 - 3537 - 29923 - 30762是否满足此条件。
我构建了一个模式,它只在指定的顺序下工作,但是如果ID交换,它就不工作了。
模板:^.*\b(-*(559|3319|3537|29923|30762)-*){4,}\b.*$
最初,我认为一个简单的(559|3319|3537|29923|30762){4,}就足够了,但在本例中它也不起作用,尽管它看到了所有4个值,但没有量词。
请告诉我怎样正确地写出这样的表达式。

ttisahbt

ttisahbt1#

为了便于阅读/测试,我将搜索的ID简化为1 - 5的整数。以下模式将匹配5个ID中至少4个ID的字符串:

(\b(1|2|3|4|5)\b.*){4,}

Play with this here
或者MySQL的正则表达式方言:

([[:<:]](1|2|3|4|5)[[:>:]].*){4,}

Play with MySQL version here
以下是一些例子:
| 编号|示例|是火柴吗?|说明|
| - ------|- ------|- ------|- ------|
| 1个|一、二、三、四、五|是|所有的身份证|
| 第二章|一、二、三、九、五|是|足够的ID|
| 三个|1 - 1 - 9 - 1|是|ID够多了,但还是有重复的|
| 四个|九八七六|否|没有一个身份证|
| 五个|一、二、三、九、九|否|有一些,但还不够|
如果示例3中所示的重复Id是一个问题,那么regex可能不适合这个问题。

yv5phkfx

yv5phkfx2#

    • 编辑:**
^.*\b((559|3319|3537|29923|30762)-?([0-9]*)?-?){4,}\b.*$

这背后的原因是每个组不只是5个数字中的一个,它还可以包含一些额外的字符。因此,您的示例中匹配的组是:

  • (五百五十九年-)
  • (3319年-)
  • (3537年至4345年)
  • 小行星29923
    • 原答复:**

这是一种方法(不确定是否有其他方法):

^.*\b(559|3319|3537|29923|30762)[0-9-]*(559|3319|3537|29923|30762)[0-9-]*(559|3319|3537|29923|30762)[0-9-]*(559|3319|3537|29923|30762)\b.*$

相关问题