如何使用正则表达式匹配字符串以匹配以下字符的任意组合:
Y M D
也就是说,以下字符串应该匹配...,只要它包含任意数量的这些字符:
YYYYMMDD blahYYMMDD c:\mydir\YYYYDDMM YYDD DD MMYYDD ...etc
所有这些都应该匹配...只要这些字符连续出现,它就应该匹配。regex会是什么?
vsmadaxz1#
两个或两个以上的Y、M或D(例如,MY、DD或YD)?
Y
M
D
MY
DD
YD
/[YMD]{2,}/
或者你的意思是这些字母中的任何一个在一行中出现两次或更多次(即YY,MM或DD)?
YY
MM
/Y{2,}|M{2,}|D{2,}/
你也可以用一个lookahead和一个backreference来实现:
# one of [YMD] followed by another one of whichever letter matched /([YMD])(?=\1)/
xoshrz7s2#
我不会被日期格式匹配的相似性所误导,当字符串包含Y、M和D时,以任何顺序选择你想要匹配的单词。此:'(?=.*M)(?=.*Y)(?=.*D)'使用正前瞻Assert。
'(?=.*M)(?=.*Y)(?=.*D)'
2条答案
按热度按时间vsmadaxz1#
两个或两个以上的
Y
、M
或D
(例如,MY
、DD
或YD
)?或者你的意思是这些字母中的任何一个在一行中出现两次或更多次(即
YY
,MM
或DD
)?你也可以用一个lookahead和一个backreference来实现:
xoshrz7s2#
我不会被日期格式匹配的相似性所误导,当字符串包含Y、M和D时,以任何顺序选择你想要匹配的单词。
此:
'(?=.*M)(?=.*Y)(?=.*D)'
使用正前瞻Assert。