2011-12-09 47 views
0

我如何匹配使用正則表達式以下字符的任意組合匹配的字符串:我如何匹配這是一個正則表達式

Y M D 

也就是說,以下字符串應該匹配...只要它包含任何數量的那些字符:

YYYYMMDD 
blahYYMMDD 
c:\mydir\YYYYDDMM 
YYDD 
DD 
MMYYDD 
...etc 

所有這些應該匹配...只要這些字符連續出現,就應該匹配。正則表達式會是什麼?在一排

+0

這些都不是我正在尋找的東西。我想匹配(並提取)包含「Y」,「M」或「D」字符的任何組合的任何子字符串,我只想提取Y,M,D字符。它們可以是任何數字,任何組合,但只要Y,M或D字符包含在一個連續的字符串中,我想要提取該連續的字符串。所以在我的例子中,返回的值是:「YYYYMMDD」,「YYMMDD」,「YYYYDDMM」,「YYDD」,「DD」,「MMYYDD」 – GregH

+0

我覺得如果我想提取那部分,那麼正則表達式會是: ([YMD] +)/ – GregH

+0

您是否看到我的第一個'/ [YMD] {2,} /'示例?我認爲那正是你要問的。除非你只想匹配一個字符(不是2或更多),在這種情況下你是對的:'/ [YMD] + /'。 – Wiseguy

回答

1

兩個或兩個以上的YM,或D(例如,MYDD,或YD)?

/[YMD]{2,}/ 

Refiddle example


或者你的意思是任何地方的個別字母連續發生兩次以上(即YYMM,或DD)?

/Y{2,}|M{2,}|D{2,}/ 

你也可以得到一個lookahead有點花哨和backreference

# one of [YMD] followed by another one of whichever letter matched 

/([YMD])(?=\1)/ 
+0

我會如何說YMD,然後是任何數量的[YMD]事件? – GregH

+0

@GregH Literal'YMD'後跟任何'Y','M'或'D'字符(包括none?)?試試'/ YMD [YMD] * /'。 – Wiseguy

0

我不會被相似的日期格式匹配的誤導,並採取你的話,你想當字符串包含Y和M以及D時,以任何順序匹配。使用'(?=.*M)(?=.*Y)(?=.*D)'

積極向前斷言:

此。

+0

你能否在這裏提供一個評論,包含這個正則表達式如何工作的解釋? – GregH