我有一个正则表达式可以验证我的输入,例如
正则表达式:
^(?=.{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个示例)?
答案 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次之间匹配先前的模式
$
-匹配字符串的结尾
编辑:模式:
^(?=[^;]{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