正则表达式,用于根据以下正则表达式

时间:2020-01-27 06:22:13

标签: regex

我有一个正则表达式可以验证我的输入,例如

正则表达式: ^(?=.{1,15}$)([a-zA-Z0-9]+)(?:[-]{1})[a-zA-Z0-9]+$

示例1: BBB-123BBB

现在,我想使用上述内容创建一个正则表达式,其中我的正则表达式可以使用分号(;)作为分隔符来验证多个输入,并且最大输入可以为20。

喜欢前2名: BBB-123BB,AAA-1234;EEE-9876....20 items

例如2。 BB-123BB,AAA3-1234;EEE334-9876....20 items

如何在第一个上面扩展我的正则表达式,以允许添加多个输入,同时让它们用分号分隔,最多可以有20个项目(如前2个示例)?

2 个答案:

答案 0 :(得分:1)

如果最大值对于实施不重要,则只需允许任意重复即可。

^(?=[^;]{3,15}(?:;[^;]{3,15})*$)[a-zA-Z0-9]+-[a-zA-Z0-9]+(;[a-zA-Z0-9]+-[a-zA-Z0-9]+)*$

如果要专门允许0到19个重复,请将最后一个*更改为{0,19}

可以匹配主表达式的最小字符串包含三个字符;所以我将长度限制更新为{3,15}

减号简单地与自己匹配,因此不需要将其放在字符类中;并且从来没有充分的理由指定任何重复,因此我相应地简化了主正则表达式。

答案 1 :(得分:1)

基于您的模式,我删除了不必要的捕获组并使用了简单的-,它等效于(?:[-]{1})。这是我想出的:

^(?:(?:^|;)(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){1,20}$

说明:

^-匹配字符串的开头

(?:...)-非捕获组

^|;-交替:从字面上匹配;或匹配字符串的开头

[^;]{1,15};-除;以外的1到15个字符之间匹配

{1,20}-在1到20次之间匹配先前的模式

$-匹配字符串的结尾

Demo

编辑:模式:

^(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+(?:;(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){0,19}$

一开始不会接受;

第二编辑:

^(?=[^;]{1,15}(?:;|$))[a-zA-Z0-9]+-[a-zA-Z0-9]+(?:;(?=[^;]{1,15})[a-zA-Z0-9]+-[a-zA-Z0-9]+){0,19}$

已添加:(?:;|$)-完全匹配;$-字符串结尾

它的作用:将令牌的长度正确限制为15