繁体   English   中英

使用正则表达式匹配多个模式

[英]Match multiple patterns with a Regex

我有3组:时间,日期和别针。 我可以让这一行匹配这一行:

26/06/2012 33:06:12a_user_logged_in,3412234,2,3,512,3 33:06:12a_user_logged_in,3412234,2,3,512,3,26 / 06/2012 26/06/2012 a_user_logged_in_at,33:06:12, 3412234,2,3,512,3

我希望将26/06/2012作为date组, 33:06:12作为time ,将3412234作为pin组。

我已经成功地做到了这一点,但只有线条必须像第一个一样处于某种模式

(?<date>[\d]+/[\d]+/[\d]+) (?<time>[\d]+:[\d]+:[\d]+)([ |,][a-zA-z]*)+,(?<pin>[\d]{4,10}).+ 

但是当我将这种模式应用于其他两种线形式时,它并不匹配。

我的问题是,无论线形是什么,如何匹配时间,日期和引脚组?

只需添加| 你的表达之间:

(?<date>[\d]+/[\d]+/[\d]+)|(?<time>[\d]+:[\d]+:[\d]+)|(?<pin>(?<=[^/])[\d]{4,10})

如果您不想同时验证模式,可以从字符串的开头开始使用前瞻 由于它们实际上并没有消耗任何东西,因此在完成一个前瞻后引擎会跳回到开始状态。 因此,三场比赛的顺序无关紧要:

^(?=.*(?<date>\d+/\d+/\d+))(?=.*(?<time>\d+:\d+:\d+))(?=.*,(?<pin>\d{4,10}))

请注意,pin组前面。 否则,您可能会将年份作为引脚(因为它也是4位数)。

但话又说回来,为了您的代码的可读性,您可能希望将其分成三种模式(这也避免了捕获,因此它甚至可能不会那么慢):

Pattern for date: \d+/\d+/\d+
Pattern for time: \d+:\d+:\d+
Pattern for pin:  (?<=,)\d{4,10}

这些只会在整场比赛中为您提供所需的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM