我希望将一些子字符串(例如月份中的日期)匹配为字符串中的“21”或“22nd”或“23rd”,因此我使用此模式创建了正则表达式:
((\d{1,2})(st)|(nd)|(rd)|(th)).
我做了这些小组,因为我想做替换。但是当我匹配“2012年3月21日星期一”这样的字符串时,它总是匹配两个子字符串:2012年3月21日的Mo'nd'ay。
所以我很困惑为什么它与“Mo'nd'ay”匹配?
答案 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)
。
您匹配字符串nd
,rd
,th
或(一个或两个数字后跟st
)。