我正在尝试创建一个正则表达式,该正则表达式将匹配一个模式,但如果最后一个组长度不完全为4个字符,则不匹配。
示例:
Regex:(.{1,}-)(.{1,}-)(.{1,}-)(\d{4,4})
输入良好:AAAA A-0001
输入错误:AAAA A-00011
我的Regex失败了,它从两个输入中提取A-AAAA-0001
发布于 2014-01-22 02:34:06
以下正则表达式将从字符串内部提取匹配项(即,它将找到匹配的子字符串):
(?<=\s|^)([^\s]+-){3}(\d{4})(?=\s|$)以下将只获取整个字符串的匹配信息
^([^\s]+-){3}(\d{4})$我简化了您的正则表达式,但假设您没有将每组字符用于某一项。
我把你的:
(.{1,}-)(.{1,}-)(.{1,}-)转到
([^\s]+-){3}上面写着“匹配任何不是空格的东西,并以短距结束3次。”+操作符是表示{1,]或“至少一次”的缩写。
我们能说得更具体点吗?
我怀疑您可能只想匹配字母数字值。例如,我怀疑$-A%^A-@-0001是否是您的有效匹配。如果我是对的,您将需要使用一个速记字符类,这将使regex看起来像这样(我假设您的regex区分大小写):
Match子字符串:
(?<=\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})的意思是,回顾字符串并匹配下面的内容,但是不要将它添加到我的结果中(它称为正向后查找)发布于 2014-01-22 02:10:48
相应地,用^和$锚定正则表达式,用于字符串的开始和结束。
如果不是整个字符串,那么负前瞻性断言将帮助您(?!\d)
参考文献:
发布于 2014-01-22 02:34:47
首先,我建议你简化一下你的Regex。我的建议是:
(\w+-){3}(\d{4})由于您有3组 of 单词字符后面跟着-符号,这是非常简单的。
现在,为了只捕获那些想要的匹配,如果您正在测试这些字符串,您只需要添加^和$分隔符。
^(\w+-){3}(\d{4})$请检查这个Regex101链接以查看它的运行情况。
https://stackoverflow.com/questions/21272854
复制相似问题