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-9]{2}
    字符串必须以两个匹配的字符开头(即[a-z0-9A-Z])
  • ([.-])
    下一个字符必须是点或连字符,从现在起
    \1
    将包含此值
  • ([a-z0-9]{2}\1){0,8}
    我们需要0到8对2*字母数字字符+使用的第一个分隔符
  • [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-9]{2}
    字符串必须以两个匹配的字符开头(即[a-z0-9A-Z])
  • ([.-])
    下一个字符必须是点或连字符,从现在起
    \1
    将包含此值
  • ([a-z0-9]{2}\1){0,8}
    我们需要0到8对2*字母数字字符+使用的第一个分隔符
  • [a-z0-9]{2}
    字符串必须以两个字母数字字符结尾

1。什么口味的regex?2.为什么必须用正则表达式来完成呢?@All…我正在对MVC3模型对象的属性使用[RegularExpression()]修饰符。这对用户来说很好,因为验证应用于任何使用该属性的地方1。什么口味的regex?2.为什么必须用正则表达式来完成呢?@All…我正在对MVC3模型对象的属性使用[RegularExpression()]修饰符。这对用户来说很好,因为验证应用于属性所在的任何地方used@smendola...thanks对于上述定义的解释。美好的这对我理解这个问题真的很有帮助RegEx@smendola[.]将不匹配任何元素?但是,只有