我正在尝试创建一个与模式匹配的正则表达式,但如果最后一个组的长度不是4个字符,则不匹配。
例:
正则表达式:(。{1,} - )(。{1,} - )(。{1,} - )(\ d {4,4})
好的输入:A-AAAA-A-0001
输入错误:A-AAAA-A-00011
我的正则表达式失败,它从两个输入中选取A-AAAA-A-0001
答案 0 :(得分:3)
以下正则表达式将从字符串内部拾取匹配项(即它将找到匹配的子字符串):
(?<=\s|^)([^\s]+-){3}(\d{4})(?=\s|$)
以下内容仅为整个字符串选取匹配
^([^\s]+-){3}(\d{4})$
我已经简化了你的正则表达式,但假设你并没有使用每组字符。
我转过你了:
(.{1,}-)(.{1,}-)(.{1,}-)
向
([^\s]+-){3}
其中说“匹配任何不是空白的内容,并以短划线结束3次。'+'运算符是说{1,]或”至少一次“的简写。
我们可以更具体一点吗?
我怀疑你可能只想匹配字母数字值。例如,我怀疑$-A%^A-@-0001
是否适合您。如果我对此是正确的,你会想要使用速记字符类,这会使你的正则表达式看起来像这样(我假设你的正则表达式区分大小写):
匹配子字符串:
(?<=\s|^)([A-Za-z\d]+-){3}(\d{4})(?=\s|$)
匹配整个字符串:
^([A-Za-z\d]+-){3}(\d{4})$
一些指示:
{4,4}
说“恰好4次”,而是使用
{4}
{1,}
说“1次或更多次”,而是使用
+
(?={regex in here})
表示,在字符串中向前看并匹配以下内容,但不要将其添加到我的结果中(它称为正向前瞻)(?<={regex in here})
表示在字符串中向后看并匹配以下内容,但不要将其添加到我的结果中(它称为正向后看)答案 1 :(得分:2)
使用^
和$
将正则表达式固定为字符串的开头和结尾。
如果它不是整个字符串那么负面前瞻断言会帮助你(?!\d)
参考文献:
答案 2 :(得分:1)
首先,我建议你稍微简化你的正则表达式。我的建议是:
(\w+-){3}(\d{4})
由于您有 3组 字符后跟-
符号,因此非常简单。
现在,为了只捕获那些所需的匹配项,如果您正在测试这些字符串,则只需要添加^
和$
分隔符。
^(\w+-){3}(\d{4})$
请检查this Regex101 link以查看其实际效果。