匹配正则表达式字母和数字

时间:2018-06-11 14:24:30

标签: regex

我正在尝试创建一个匹配字符串的正则表达式:

63PDH
XX1PF  
HX11F

哪里有数字和数字。不能只匹配数字或字母,必须像上面那样5。

我通过一些研究做了以下表达,但我无法与5匹配:

([A-Z]*([0-9]+[A-Z]+))

我需要这样的东西:

匹配任何有字母和数字的5个字符序列。

([A-Z]*([0-9]+[A-Z]+)){5}

任何人都知道如何继续?

5 个答案:

答案 0 :(得分:3)

假设规则是

  • 必须包含A-Z和0-9
  • 长度为5

然后我会用三个预测写三个检查:

^                   # start of string
(?=[0-9A-Z]{5}$)    # contains 5 characters in 0-9 and A-Z before the end of the string 
(?=.*?[0-9])        # contains at least one 0-9 anywhere
(?=.*?[A-Z])        # contains at least one A-Z anywhere
.*                  # actual match

“实际匹配”可以是.*,因为所有其他规则都可以通过预见条件得到满足。但是.*必须在那里,因为预测本身不会消耗任何字符。

在一行

^(?=[0-9A-Z]{5}$)(?=.*?[0-9])(?=.*?[A-Z]).*

要在多行输入上成功使用正则表达式,您需要启用多行标记,以便^$将其含义更改为“line-start”和“line-line”结束“而不是”string-start“和”string-end“。

答案 1 :(得分:1)

我认为没有好的答案。

因为它检查的情况非常多。

我认为您应该使用2个正则表达式进行检查:

  

第一个正则表达式检查5个字符(数字或字母)。

     

第二个正则表达式检查5个数字或5个字母(并忽略它)。

答案 2 :(得分:0)

这适用于您的示例:

^(?=.*\d+)(?=.*[a-zA-Z]+).{5}$

http://www.rubular.com/r/nqr06FBwsx

答案 3 :(得分:0)

使用否定lookahead检查字符串的另一个想法不仅包含digits (?!\d*$)或仅包含非数字(?!\D*$)并定义允许的字符[A-Z\d]{5}

^(?!\d*$|\D*$)[A-Z\d]{5}$

See demo at regex101

答案 4 :(得分:0)

另一种方法是使用条件

^(?:(\d)|([A-Z])|[\dA-Z]){5}$(?(1)(?:(?(2)|(?!)))|(?!))