Regex 带分隔符和长度的正则表达式
我需要实现一个复杂的正则表达式,我不是一个很好的正则表达式专家 这些规则是: 两个字母数字字符后跟一个Regex 带分隔符和长度的正则表达式,regex,Regex,我需要实现一个复杂的正则表达式,我不是一个很好的正则表达式专家 这些规则是: 两个字母数字字符后跟一个或一个-后跟两个字母数字字符 它不能为空,也不能只有一对(即01)字符串最多可以是10组2个字母数字。i、 例如,01.02.03.04.05.06.10和分隔符,一旦选择,就不能更改。表达式不能以分隔符结尾 例如: 有效期: a1.02.b3.00 01-02-aa-04 01.02 aa.bb ac.21 无效: aa.01-02 123.2.10 01 a1. 想法?这可能有用: ^[
或一个-
后跟两个字母数字字符
它不能为空,也不能只有一对(即01
)字符串最多可以是10组2个字母数字。i、 例如,01.02.03.04.05.06.10
和分隔符,一旦选择,就不能更改。表达式不能以分隔符结尾
例如:
有效期:
a1.02.b3.00
01-02-aa-04
01.02
aa.bb
ac.21
无效:
aa.01-02
123.2.10
01
a1.
想法?这可能有用:
^[\w\d][\w\d](?:([.-])[\w\d][\w\d])(?:\1[\w\d][\w\d]){,8}
这可能有效:
^[\w\d][\w\d](?:([.-])[\w\d][\w\d])(?:\1[\w\d][\w\d]){,8}
它将类似于:
[a-z0-9]{2}\([.][a-z0-9]{2}\){1,9}|[a-z0-9]{2}\([-][a-z0-9]{2}\){1,9}
{2} 正好是2
{1,9}表示至少一个,最多9个
\(something\)是一个分组
a | b表示匹配a或b,它类似于:
[a-z0-9]{2}\([.][a-z0-9]{2}\){1,9}|[a-z0-9]{2}\([-][a-z0-9]{2}\){1,9}
{2} 正好是2
{1,9}表示至少一个,最多9个
\(something\)是一个分组
a | b表示匹配a或b我尝试了以下方法:
^[[:alnum:]]{2}([-.])[[:alnum:]]{2}(?:\1[[:alnum:]]{2}){0,8}$
您需要两端的锚点使其与整个字符串匹配。使用[[:alnum:]
会根据区域设置匹配所有字母数字。如果你只想在英语中考虑的话,不管语言环境如何,你都想用<代码> [AZ-ZO-9] < /COD>代替每种情况。
最棘手的部分是backreference,\1
,它确保您始终使用相同的分隔符——它指的是([-.])
中的捕获括号。因此,当分隔符重复0-8次,后跟2个字母数字时,分隔符总是相同的
我在Perl中尝试了这一点,它通过了我抛出的一些测试字符串。如果您使用不同的语言/库,您的里程可能会有所不同。我尝试了以下方法:
^[[:alnum:]]{2}([-.])[[:alnum:]]{2}(?:\1[[:alnum:]]{2}){0,8}$
您需要两端的锚点使其与整个字符串匹配。使用[[:alnum:]
会根据区域设置匹配所有字母数字。如果你只想在英语中考虑的话,不管语言环境如何,你都想用<代码> [AZ-ZO-9] < /COD>代替每种情况。
最棘手的部分是backreference,\1
,它确保您始终使用相同的分隔符——它指的是([-.])
中的捕获括号。因此,当分隔符重复0-8次,后跟2个字母数字时,分隔符总是相同的
我在Perl中尝试了这一点,它通过了我抛出的一些测试字符串。如果您使用不同的语言/库,您的里程可能会有所不同。可能
([\p{L}0-9]{2})(\.|-)([\p{L}0-9]{2})
这也可以处理Unicode字母,但我不确定它是否适合您的需要,因为“有效”集合中的前两行包含的项目不是您在问题中所要查找的格式
希望这有帮助。可能
([\p{L}0-9]{2})(\.|-)([\p{L}0-9]{2})
这也可以处理Unicode字母,但我不确定它是否适合您的需要,因为“有效”集合中的前两行包含的项目不是您在问题中所要查找的格式
希望这能有所帮助。嘿,伙计们!?
为什么要把事情弄得更复杂
^[a-z0-9]{2}([.-])([a-z0-9]{2}\1){0,8}[a-z0-9]{2}$
根据您使用此正则表达式的位置,您可以选择使其与大写字符匹配
如果将regexp编写为
/regular expression/
:请使用/i
作为修饰符(不区分大小写的匹配)
如果您在.NET下使用正则表达式(如您所述),则使用IgnoreCase
选项
此正则表达式中不同部分的解释
字符串必须以两个匹配的字符开头(即[a-z0-9A-Z])^[a-z0-9]{2}
下一个字符必须是点或连字符,从现在起([.-])
将包含此值\1
我们需要0到8对2*字母数字字符+使用的第一个分隔符([a-z0-9]{2}\1){0,8}
字符串必须以两个字母数字字符结尾[a-z0-9]{2}
^[a-z0-9]{2}([.-])([a-z0-9]{2}\1){0,8}[a-z0-9]{2}$
根据您使用此正则表达式的位置,您可以选择使其与大写字符匹配
如果将regexp编写为
/regular expression/
:请使用/i
作为修饰符(不区分大小写的匹配)
如果您在.NET下使用正则表达式(如您所述),则使用IgnoreCase
选项
此正则表达式中不同部分的解释
字符串必须以两个匹配的字符开头(即[a-z0-9A-Z])^[a-z0-9]{2}
下一个字符必须是点或连字符,从现在起([.-])
将包含此值\1
我们需要0到8对2*字母数字字符+使用的第一个分隔符([a-z0-9]{2}\1){0,8}
字符串必须以两个字母数字字符结尾[a-z0-9]{2}