正则表达式匹配[整数] [冒号] [alphanum] [冒号] [整数]

时间:2013-02-08 15:18:11

标签: regex

我正在尝试匹配格式为[integer] [冒号] [alphanum] [冒号] [整数]的字符串。例如,42100:ZBA01:20。我需要用冒号分开这些......

我想学习正则表达式,所以如果可以,请告诉我我做错了什么: 这就是我能够想到的......

^(\d):([A-Za-z0-9_]):(\d)+$
^(\d+)$ 
^[a-zA-Z0-9_](:)+$
^(:)(\d+)$

首先我尝试匹配字符串的部分,这些部分匹配整个字符串。你可以说,我对正则表达式不是很熟悉。

编辑:正则表达式用于输入桌面应用程序。我不确定使用什么'语言'或'类型'的正则表达式,所以我假设.NET。 我需要能够识别每个分组的字符,用冒号分割。因此,组#1应该是第一个整数,组#2应该是字母数字组,组#3应该是整数(范围1-4)。

提前谢谢你,

大流士

2 个答案:

答案 0 :(得分:5)

我假设分号(;)是冒号(:)?好吧,有点基础。

  • ^匹配输入的开头。也就是说,只有在输入开头找到匹配项时,正则表达式才会匹配。
  • 同样,$匹配输入的结尾。

^(\d+)$将匹配 一个或多个数字的字符串。这是因为匹配需要从输入的开始处开始并在输入的结尾处停止。换句话说,整个输入需要匹配(而不仅仅是它的一部分)。 +表示一个或多个匹配。

有了这些知识,你会发现^(\d):([A-Za-z0-9_]):(\d)+$实际上非常接近正确。此表达式表示整个输入需要匹配:

  1. 一位数;
  2. 冒号;
  3. 一个单词字符(或您所称的字母数字字符);
  4. 冒号;
  5. 一个或多个数字。
  6. 问题显然在1和3中。您需要在那里添加+量词以匹配一个或多个次而不是一次。此外,您希望将这些量词放置在捕获组中,以便在一个捕获组内获得多个匹配,而不是接收包含单个匹配的多个捕获组。

    ^(\d+):([A-Za-z0-9_]+):(\d+)$
    

答案 1 :(得分:3)

您需要使用量词

^(\d+):([A-Za-z0-9_]+):(\d+)$
    ^     ^     ^

+是与先前模式1匹配多次的量词

现在您可以通过访问特定组

来访问这些值