我甚至不确定使用正则表达式是否可行,但这是场景:我有一个字符串,长度可以是2,4或6个字符。字符是成对的数字(例如:01或0125或012589)。
我需要三个表达式来捕获前两个数字(上例中的“01”),中间数字(“25”)和最后两个“89”(再次,这些只是示例,可以是任意数字之间的任何数字0和9)。
表达式必须符合字符串的受限字符长度(必须是2,4或6个字符 - 1,3,5,7或更多字符不会导致匹配)。此外,捕获最后两位数的表达式不能与4个字符串的最后两位数匹配。最后两位数仅对6个字符的字符串有效。同样,中间捕获仅对4或6个字符串有效。
我不能使用代码,只能使用正则表达式。
答案 0 :(得分:3)
在不使用正则表达式的情况下执行此操作似乎要容易得多,但为了参数,您可以使用此模式:
^(\d\d)(\d\d)?(\d\d)?$
或者这种模式实际上只有一个捕获组,根据您的代码可能更容易使用:
^(\d\d){1,3}$
两种模式都将匹配两个组中的2,4或6位数字,而不是其他任何模式。测试一下here。
答案 1 :(得分:3)
您可以使用此模式:
(?<!\d)(?<first>[0-9]{2})(?:(?<middle>[0-9]{2})(?<last>[0-9]{2})?)?(?!\d)