我有以下正则表达式,我无法在PHP中匹配日期,但只能以某种格式。我的正则表是:
[^_][0-9]*[-][0-9][0-9]-[0-9][0-9]
我想只匹配
AFM_LU78_8-14-08.pdf
但不是
AFM_LU78_08-14-08.pdf
我尝试了多个其他正则表达式匹配,但尚未找到方法。有人可以帮忙吗?我觉得我错过了一个前瞻性的前瞻?
感谢。
答案 0 :(得分:0)
如果你只想提取日期,你应该可以使用这样的东西:
(?<=_)[1-9][0-9]?-[0-9]{2}-[0-9]{2}
[1-9][0-9]?
确保日期部分中没有前导零,(?<=_)
确保在日期之前有下划线。
我不确定您是否意识到在当前模式中,[^_]
与日期中的第一个数字相匹配,您的模式也会匹配AFM_LU78_abc-14-08.pdf
之类的内容。< / p>
否则,如果不保证日期在下划线之后,您可以尝试:
(?<=[^0-9])[1-9][0-9]?-[0-9]{2}-[0-9]{2}
[相当于(?<![0-9])[1-9][0-9]?-[0-9]{2}-[0-9]{2}
使用负面的后视镜而不是]
确保在日期之前还有其他数字。
(?<= ... )
是一个积极的外观,可以确保内部的内容在随后的模式之前。
答案 1 :(得分:0)
[0-9]-[0-9][0-9]-[0-9][0-9]
这将匹配8但不匹配08。 如果你想匹配18,请使用例如:
1?[0-9]-[0-9][0-9]-[0-9][0-9]
那也是:
1?\d-\d\d-\d\d