在 Perl 中提取日期掩码的正则表达式是什么?
我有一个 perl 字符串,其中包含目录规范。如果字符串包含构成日期掩码的任何单个子字符串或子字符串组合,我想提取该子字符串。例如,目录规范可能是:
/mydir/data/YYYYMMDD
我希望能够提取“YYYYMMDD”字符串。但是,路径的该部分可以是以下字符串的任何单个或组合:
YY
YYYY
MM
DD
因此目录规范字符串可以读取:
/mydir/data/DD/data2
并且我希望作为正则表达式比较的结果返回“DD”。当字符串必须包含一个或多个日期掩码字符串并且该字符串必须位于两个“/”字符之间或存在于字符串末尾时,如何捕获该字符串?
I have a string in perl that contains a directory specification. If the string contains any individual or combination of substrings that comprise a date mask, I want to extract that substring. For example, the directory spec may be:
/mydir/data/YYYYMMDD
I want to be able to extract the "YYYYMMDD" string. However that portion of the path could be any individual or combination of the following strings:
YY
YYYY
MM
DD
So the directory spec string could read:
/mydir/data/DD/data2
and I want the "DD" returned as a result of the regex comparison. How do I capture the string when it must contain one or more of those date mask strings and that string must be between two "/" characters or exist at the end of the string?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
我假设
YYYY
和YY
不应同时出现在同一模式中,因为否则就没有意义。表达式返回正则表达式<代码>(?^:DDMMYYYY|DDYYYYMM|MMDDYYYY|MMYYYYDD|YYYYDDMM|YYYYMMDD|DDMMYY|DDYYMM|DDYYYY|MMDDYY|M MYYDD|MMYYYY|YYDDMM|YYMMDD|YYYYDD|YYYYMM|DDMM|DDYY|MMDD|MMYY|YYDD|YYMM|YYYY|DD|MM|YY)。 (半)函数式编程获胜!
I'm making the assumption that
YYYY
andYY
shall not both appear in the same pattern, because otherwise it does not make sense.The expression returns the regex
(?^:DDMMYYYY|DDYYYYMM|MMDDYYYY|MMYYYYDD|YYYYDDMM|YYYYMMDD|DDMMYY|DDYYMM|DDYYYY|MMDDYY|MMYYDD|MMYYYY|YYDDMM|YYMMDD|YYYYDD|YYYYMM|DDMM|DDYY|MMDD|MMYY|YYDD|YYMM|YYYY|DD|MM|YY)
. (Semi-)Functional programming for the win!我假设只有一个“日期”组件,或者如果没有,您需要第一个:
I assume that there is only one "date" component, or if not, that you want the 1st one:
假设掩码字段始终按 Y - M - D 的顺序排列,这将满足您的需要:
Assuming the mask fields are always in the order Y - M - D, this will do what you need:
我会使用并检查是否
,也许还有一些检查是否有效的组合。
更新: 好的,要只获取掩码,而不是数字,您可以将其更改为“
这应该排除所有无效组合,例如 YYDDYY 或 YYYYMMYY 等”。
I'd useand check whether
and maybe some checks for valid combinations.
Update: OK, to just get the mask, not the numbers, you can change this to
This should exclude all invalid combinations like YYDDYY or YYYYMMYY and so on.