首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >只有当最后一组的长度正好为n个字符时,才匹配Regex

问只有当最后一组的长度正好为n个字符时,才匹配Regex
EN

Stack Overflow用户
提问于 2014-01-22 02:09:04
回答 3查看 1.1K关注 0票数 3

我正在尝试创建一个正则表达式,该正则表达式将匹配一个模式,但如果最后一个组长度不完全为4个字符,则不匹配。

示例:

Regex:(.{1,}-)(.{1,}-)(.{1,}-)(\d{4,4})

输入良好:AAAA A-0001

输入错误:AAAA A-00011

我的Regex失败了,它从两个输入中提取A-AAAA-0001

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-01-22 02:34:06

以下正则表达式将从字符串内部提取匹配项(即,它将找到匹配的子字符串):

代码语言:javascript
复制
(?<=\s|^)([^\s]+-){3}(\d{4})(?=\s|$)

以下将只获取整个字符串的匹配信息

代码语言:javascript
复制
^([^\s]+-){3}(\d{4})$

我简化了您的正则表达式,但假设您没有将每组字符用于某一项。

我把你的:

代码语言:javascript
复制
(.{1,}-)(.{1,}-)(.{1,}-)

转到

代码语言:javascript
复制
([^\s]+-){3}

上面写着“匹配任何不是空格的东西,并以短距结束3次。”+操作符是表示{1,]或“至少一次”的缩写。

我们能说得更具体点吗?

我怀疑您可能只想匹配字母数字值。例如,我怀疑$-A%^A-@-0001是否是您的有效匹配。如果我是对的,您将需要使用一个速记字符类,这将使regex看起来像这样(我假设您的regex区分大小写):

Match子字符串:

代码语言:javascript
复制
(?<=\s|^)([A-Za-z\d]+-){3}(\d{4})(?=\s|$)

匹配整串:

代码语言:javascript
复制
^([A-Za-z\d]+-){3}(\d{4})$

几个指针:

  • 与其指定{4,4}来表示“精确4次”,不如使用{4}
  • 不要将{1,}指定为"1次或多次“,只需使用+
  • (?={regex in here})的意思是,向前看字符串并匹配下面的内容,但是不要将它添加到我的结果中(它被称为正前瞻)
  • (?<={regex in here})的意思是,回顾字符串并匹配下面的内容,但是不要将它添加到我的结果中(它称为正向后查找)
  • 也有相反的负面观察,但我会留给你们去研究。
票数 3
EN

Stack Overflow用户

发布于 2014-01-22 02:10:48

相应地,用^和$锚定正则表达式,用于字符串的开始和结束。

如果不是整个字符串,那么负前瞻性断言将帮助您(?!\d)

参考文献:

票数 2
EN

Stack Overflow用户

发布于 2014-01-22 02:34:47

首先,我建议你简化一下你的Regex。我的建议是:

代码语言:javascript
复制
(\w+-){3}(\d{4})

由于您有3组 of 单词字符后面跟着-符号,这是非常简单的。

现在,为了只捕获那些想要的匹配,如果您正在测试这些字符串,您只需要添加^和$分隔符。

代码语言:javascript
复制
^(\w+-){3}(\d{4})$

请检查这个Regex101链接以查看它的运行情况。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21272854

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档