无法找出特定的RegEx

时间:2012-11-18 06:06:09

标签: regex

我试图让正则表达式没有运气。我已经能够将表达式限制为10位数的字母数字:

(^[a-zA-Z0-9]{10}+$)

但是我也试图让它允许任何位置只有1场比赛的$字符。

对于类似pQp3b8ar$8k7DdRoB$5W的内容,它应该是真的。

2 个答案:

答案 0 :(得分:4)

三个一般性说明:

^[a-zA-Z0-9$]{10}$
  • 括号不是必需的
  • {10}+没有多大意义,放弃加号(在固定数量上不需要possessive quantifier
  • 如果您想允许美元符号,只需将其添加到字符类
  • 即可

要仅允许美元符号一次,您可以使用上述的扩展版本:

^(?=[^$]*\$[^$]*$)[a-zA-Z0-9$]{10}$

(?=[^$]*\$[^$]*$)是一个前瞻性的读取

(?=        # start look-ahead
  [^$]*    #   any number of non-dollar signs
  \$       #   a dollar sign
  [^$]*    #   any number of non-dollar signs
  $        #   the end of the string
)          # end of look-ahead

它允许字符串上的任何字符,但美元只允许一次。


另一种变体是使用两个前瞻,如下所示:

^(?=[^$]*\$[^$]*$)(?=[a-zA-Z0-9$]{10}$).*

在这里,您可以使用.*来匹配字符串的其余部分,因为前瞻检查了两个条件。例如,此方法对password complexity checks非常有用。

答案 1 :(得分:0)

您可以尝试匹配包含两个字符串的字符串,其中包含任意数量的字母数字字符和$

(^[a-zA-Z0-9]+\$[a-zA-Z0-9]+$)

你可以随时检查正则表达式之后的十个长度。