正则表达式

时间:2019-03-30 13:26:41

标签: regex

我想创建仅在任何字符串具有三个或更多字符并且如果在字符串中有+号的情况下匹配的正则表达式,则+号之前和之后必须至少需要三个字符,

我创建了一个正则表达式,它满足了我的所有要求,除了第一个+号之前必须至少包含三个字符,但匹配的字符较少

这是我当前的正则表达式:(\+[a-z0-9]{3}|[a-z0-9]{0,3})$

ab+abx该字符串不匹配,但在我的正则表达式中匹配

示例:

有效字符串:

sss
sdfsgdf
4534534
dfs34543
sdafds+3232+sfdsafd
qwe+sdf
234+567
cvb+243

无效的字符串:

a
aa
a+
aa+
+aa
+a
a+a
aa+aa
aaa+a

2 个答案:

答案 0 :(得分:3)

您可以使用此正则表达式,

^[^+\n]{3,}(?:\+[^+\n]{3,})*$

说明:

  • ^-字符串的开头
  • [^+\n]{3,}-这可以确保它匹配+和换行符以外的所有字符,如果您要匹配的输入不包含任何字符,则您可以删除\n换行符和{3,}允许它匹配至少三个或更多字符

  • (?:\+[^+\n]{3,})*-该部分还允许匹配+个字符,然后进一步分隔至少三个或更多字符,并且将其整体零次或更多次以保持{{1 }}字符可选

  • +-输入结束

Demo

编辑:更新解决方案,其中空格不参与计算$任一边的字符数,其中最少需要的字符数为三个

您可以使用此正则表达式忽略对文本中空格的计数,

+

Demo

此外,如果您只处理字母数字文本,则可以使用这种更容易维护的正则表达式,

^(?:[^+\n ] *){3,}(?:\+ *(?:[^+\n ] *){3,})*$

Demo

答案 1 :(得分:2)

您可以重复0+次,将其匹配字符类[a-z0-9]中列出的3倍或更多倍,并加上一个加号:

^[a-z0-9]{3,}(?:\+[a-z0-9]{3,})*$

这将匹配:

  • ^字符串的开头
  • [a-z0-9]{3,}匹配3次以上字符类中列出的内容
  • (?:非捕获组
    • \+[a-z0-9]{3,}匹配+符号,然后匹配字符类中列出内容的3倍以上
  • )*关闭组并重复0次以上
  • $字符串结尾