我想去除(CDT)日期时间偏移值.我在下面编写了简单的正则表达式,并按原先的预期工作,但写完之后我就不知道为什么会这样.为什么结果不会在2012年停止?
原始字符串: "Thu, 02 Aug 2012 07:42:02 -1525 (CDT)"
正则表达式: .*\d{4}
结果: "Thu, 02 Aug 2012 07:42:02 -1525"
这很有效,因为它.*很贪婪.
这意味着,.*在做其他任何事情之前,这将尽可能多地匹配.
当正则表达式适用时,.*匹配整个事物,因为它是贪婪的:
2012年8月2日星期四07:42:02 -1525(CDT)
然后尝试匹配\d{4},但不幸的是,它不匹配任何东西,因为它在最后.因此,正则表达式(.*部分)将一次性回溯(返回并返回先前匹配的内容)一个字符,每次检查\d{4}:
星期四,02八月2012 07:42:02 -1525(CDT)[不匹配]
星期四,02八月2012 07:42:02 -1525(CD T)[不匹配]
星期四,02八月2012 07:42:02 -1525(C DT)[不匹配]
星期四,02八月2012 07:42:02 -1525( CDT)[不匹配]
星期四,02八月2012 07:42:02 -1525(CDT)[不匹配]
星期四,02八月2012 07:42:02 -1525(CDT)[不匹配]
...
2012年8月2日星期四07:42:02 - 1525(CDT)
此时,它能够匹配\d{4},这就是它将要做的事情:
2012年8月2日星期四07:42:02 -1525(CDT)
由于正则表达式中没有其他内容,因此将在此结束.