关于正则表达式的一些问题

时间:2012-04-18 02:19:33

标签: regex date

我希望将一些子字符串(例如月份中的日期)匹配为字符串中的“21”或“22nd”或“23rd”,因此我使用此模式创建了正则表达式:

((\d{1,2})(st)|(nd)|(rd)|(th)). 

我做了这些小组,因为我想做替换。但是当我匹配“2012年3月21日星期一”这样的字符串时,它总是匹配两个子字符串:2012年3月21日的Mo'nd'ay。

所以我很困惑为什么它与“Mo'nd'ay”匹配?

2 个答案:

答案 0 :(得分:2)

因为您缺少一组括号。尝试:

 ((\d{1,2})((st)|(nd)|(rd)|(th)))

你有什么,匹配:

     (\d{1,2})(st)
  OR (nd)
  OR (rd)
  OR (th)

答案 1 :(得分:2)

|周围没有正确的括号。您有((\d{1,2})(st)|(nd)|(rd)|(th)),但您应该:(\d{1,2})(st|nd|rd|th)

您匹配字符串ndrdth或(一个或两个数字后跟st)。