Regex 正则表达式,用于正好包含7个数字和2个连字符的排列,不包含2个连续连字符
我正在寻找与字符串匹配的正则表达式,该字符串应:Regex 正则表达式,用于正好包含7个数字和2个连字符的排列,不包含2个连续连字符,regex,Regex,我正在寻找与字符串匹配的正则表达式,该字符串应: 从一个数字开始 “中间”具有正好7位数字和2个连字符的排列,没有2个连续连字符 以数字、连字符、数字序列结尾 匹配: 01-234-5678-9 01234-56-78-9 0123-4-5678-9 012-345-678-9 01-234567-8-9 01-234-5678-9 0-12345-678-9 0-123-45678-9 0-123-45678-9 01-23456-78-9 0-123456-78-9 0-1234567
- 从一个数字开始
- “中间”具有正好7位数字和2个连字符的排列,没有2个连续连字符
- 以数字、连字符、数字序列结尾
- 01-234-5678-9
- 01234-56-78-9
- 0123-4-5678-9
- 012-345-678-9
- 01-234567-8-9
- 01-234-5678-9
- 0-12345-678-9
- 0-123-45678-9
- 0-123-45678-9
- 01-23456-78-9
- 0-123456-78-9
- 0-1234567-8-9
- 01-234-56789-0
- 01-234-567-8
- 01--2345678-9
- 01-2345678--9
- 0-1-23456789
- -01-2345678-9
^\d\d{7}\d-\d$
编辑:
多亏了我对这个问题的回答,我能够将它扩展到关于ISBN-10和ISBN-13的另一个问题…您可以断言7个数字和结尾的
数字部分
对于匹配,在连字符前后至少应有一位数字,以防止连续连字符
^\d(?=(?:-?\d){7}-?\d-\d$)\d*-\d+-\d*\d-\d$
^
字符串的开头
\d
匹配单个数字
(?=
正向前瞻
(?:-?\d){7}
匹配由可选-
分隔的7位数字
-?\d-\d$
匹配可选的-
和末尾的\d-\d$
)
关闭“向前看”
\d*-\d+-\d*\d-\d
匹配所有连字符至少由一个数字分隔的可能格式
$
字符串结尾
我的两分钱:
^(?=.{11}-\d$)(?:\d+-){3}\d
在线查看
^
-启动字符串锚定
(?=
-打开正向前瞻:
{11}-\d$
-除换行符以外的任何字符,11次后跟一个hypen、一个数字和结束字符串锚定符
)
-关闭正向前瞻
(?:
-打开非捕获组:
\d+-
-1+位后跟连字符
){3}
-关闭非捕获组并匹配三次
\d
-匹配单个数字
我想甚至^(?=.{13}$)(?:\d+-){3}\d$
也可以。为什么0-1-2345678-9
无效?我的错误刚刚更正…@YaasineDM我回滚了您的编辑。新问题得到新帖子。你不能用不同的条件改变你的OP,这会使给出的答案无效。所以,请随意打开一个新帖子。谢谢@JvdV,我想知道怎么做。。。根据你的建议,我刚刚发布了一个新问题:非常感谢你的回答!我需要进一步积极地向前看。。。你帮了大忙……顺便说一句,我也用这个来匹配非英语区的ISBN-10或13:^(97(8(9))*\d{9}^(97(8(9)-)*(\d(?=(?:-?\d){7}-?\d-\d*-\d*-\d+\d*-\d*-\d^(97(8(9))*(\d=(((?:?:?:?\d){7}\d*\d))\d*\d]-\d*\d]-\d*\d*\d*.[\d]-\dxcode];匹配9780123456789
,979-01-234-5678-x
和0123 4 5678 9
。你认为可以进一步简化吗?谢谢你的回答,看起来更简单。。。我试着调整它,使之与非英语地区的ISBN-10或13相匹配:/(97(8 | 9))*\d{9}(97(8 | 9)-*(?=。{11}-(?:\d+-){3}(97(8 | 9))*(?=。{11})(?:\d+{3})[\dx]$/I
;匹配9780123456789、979-01-234-5678-x和0123 4 5678 9。你认为它可以进一步简化吗?然后我认为你可以使它^(?=.{13}$)(?:\d+-){3}\d$
nice++我在最后一行@TheFourthBird中有了这个选项,但我不确定哪一个是“更好”的。感谢大家的夸奖=)@Thefourthbird,我将相应地更新我的问题(使用正确的示例),但基本上是:可选(ISBN-13)978
或979
前缀,后跟10位数字(ISBN-10),最后一位可能是x
,变量包括连字符或空格,约束条件与前面提到的相同。。。