我有以下字符串[datetime:yyyyMMddhhmmss]
,我想用正则表达式对其进行一些检查。我知道我可以通过多个正则表达式匹配来做到这一点,但如果可能的话,我希望(学习)在 1 个表达式中做到这一点。该字符串还可能包含破折号/连字符和下划线,如 so [datetime:yyyy_MM_dd_hh-mm-ss]
。空格被前面的代码删除。并且日期时间说明符组(像 yyyy 这样的组)可以放在 after[datetime:
和 before格式中的某个位置]
。所以这也是一个有效的格式:[datetime:dd_MM_yyyy_hh-mm-ss]
要做的检查:
- 我想确保 [datetime:] 存在。我可以使用模式
\[datetime:[\w\-]+\]
- 我想确保 6 组 yyyy MM dd hh mm ss 存在,但它们可能以随机顺序出现。
我试图用积极的前瞻/后视来做到这一点,\[datetime:[\w\-]+(?<=.?M{2}.?)\]
以匹配代码中某处 MM 的存在。但这不起作用。
任何可以帮助我的正则表达式大师?
解决方案:
根据 Bergi 的回答,我现在有了这个正则表达式模式:\[datetime:(?=.*?y{4})(?=.*?M{2})(?=.*?d{2})(?=.*?h{2})(?=.*?m{2})(?=.*?s{2})[\w\-]+\]
可以完成这项工作。因为它匹配以下所有给定的模式:
- [日期时间:yyyyMMddhhmmss]
- [日期时间:mmssyyyyddMMhh]
- [日期时间:mm_ss-yyyy_dd-MM-hh]
- [日期时间:mmssyyyyddMM_hours_hh]
并不是所有上述模式都有意义,但这正是我想要的!