坚持理解这个正则表达式

时间:2011-09-28 13:33:17

标签: regex

我坚持使用这个正则表达式

((["0"-"9"])+ ("-")*)*
    (["0"-"9"])* ["a"-"z"] ( ["a"-"z","0"-"9"] )*
    ( ("-")+ (["a"-"z","0"-"9"])+)*

到目前为止我所理解的是:

 ((["0"-"9"])+ ("-")*)*

可以是0-9之间的数字。加号意味着它可以重复(例如1157)。不确定明星做了什么:S我认为第一行的例子可能是1157-

(["0"-"9"])* ["a"-"z"] ( ["a"-"z","0"-"9"] )*

以数字开头,后跟字母和数字,例如1test5

 ( ("-")+ (["a"-"z","0"-"9"])+)*

可选择以减号开头,后跟字母和数字。例如-54

如果有人能给我一个与正则表达式匹配的字符串示例,那将会有所帮助。发现很难理解这一点。 :)

3 个答案:

答案 0 :(得分:1)

+表示至少一个前面的表达式

*表示前面表达式中的0或更多

所以((["0"-"9"])+ ("-")*)*(我会忽略引号)意味着:

至少1位数,0或更多空格-,所有这些都可以重复0次或更多次。

这意味着它将匹配:

  • 空字符串
  • 1 ------ 234 -
  • 1 2 3

通常,如果你将一个空格放入一个正则表达式,它将尝试匹配一个空格。在我的解释中,我以这种方式使用它。但是有例如在某些语言中,扩展修饰符,其中正则表达式中的空格将不被解释,然后它们可用于使正则表达式更具可读性。
我不知道你的正则表达式引擎在这种情况下做了什么。

您可以使用一些匹配的示例see your regex here on Regexr(从引号中清除)

答案 1 :(得分:1)

  1. ((["0"-"9"])+ ("-")*)*
  2. (["0"-"9"])*
  3. ["a"-"z"]
  4. ( ["a"-"z","0"-"9"] )*
  5. ( ("-")+(["a"-"z","0"-"9"])+)*
  6. 其中:

    * is 0 or more
    + is one or more
    

    为了更好地理解这个正则表达式,我把它分成了更容易阅读的段。要获得总字符串,只需跟随每个段,您将获得与此完整正则表达式匹配的字符串。

    对于段1:
    1个或更多个数字,后跟0到多个连字符' - ',可重复0次或更多次。

    第2段:
    0位或多位

    第3段:
    只有1个小写字符("abcdefghijklmnopqrstuvwxyz"

    第4段:
    0或多个小写字母或数字。

    第5段:
    连字符1次或更多次,后跟一个或多个小写字符或数字,重复0次或更多次。

    通过将它们组合在一起,我们可以获得适合此正则表达式所需的最小字符串: 0a-a

    其中段2和4可以忽略,因为它们包含0或更多。

    还有一些例子:

    9-0a0a-a0
    4456---4456---890aasd-asda-a434
    

    无限长。

答案 2 :(得分:0)

那些引用很奇怪,但我猜是

  • (0-9一次或多次,然后是“ - ”)零次或多次。
  • 然后0-9零次或多次。
  • 然后a-z后跟a-z或0-9任意次
  • 然后(“ - ”至少一次后跟a-z或0-9至少一次)零次或多次。

所以你可能会找到像

这样的比赛

0-A-A

9123-9123-312346-1412312-123223abcd992-a90898-z08333218457

123-1a92 ----- ABCDEF --------- 123456-A

除了最基本的捕获之外的选项几乎是无限的......