2016-03-01 98 views
0

我有這些輸入:正則表達式掩蔽圖案

DFDBDFDFDF21R123 
DFDBDFDFDF34R123 

我想匹配這些輸入,除了位置9和10中,象下面這樣:

DFDBDFDFxxR123 
DFDBDFDFxxR123 

所以,是明確的:匹配1-8,不包括9-10,匹配11-16。

+1

[如何匹配Java正則表達式中的任何字符?]可能重複(http://stackoverflow.com/questions/2912894/how-to-match-any-character-in-java-regular-expression ) – DavidS

+0

爲什麼不用'(。{8})..(。+)'? – sln

+0

或'string_new = string_old.replace(「(。{8})..(。+)」,「$ 1 $ 2」);' – sln

回答

1

要的

https://stackoverflow.com/users/557597/sln了辦法擴大({8})。(。+)

的 '東西' 你是從你的理解缺失正則表達式是「分組」

(SOME MATCHING SUB-STRING A)(SOME MATCHING SUB-STRING B) 

如果使用正則表達式這樣,你可以做很多包括'拉出'部分,然後重新排列它們。但它也可以幫助你將你想要搜索的「零件」分組。

所以他

.{8} 

比賽 ''這是'任何單個字符',然後{8}表示'匹配任何單個字符8次。

(.{8}) 

表示「將前8個字符分組」使用。

.. 

手段 '匹配任何兩個字符'

.+ 

手段「匹配1個或更多的 '任意字符'

(.+) 

指「組1以上的「任意字符'供以後使用'

因此...

當你把它們放在一起,你得到

(.{8})..(.+) 

這意味着「比賽第8個字符(任何8個字符)爲第1組」,然後「兩個任意字符」,然後「1個或更多字符組2」

這將允許您(取決於您的正則表達式客戶端/等)使用$ 1和$ 2打印出來,使用或...無論...組1和/或組2的值。

希望這有助於。

+0

我看不出用戶的問題。他希望匹配一些字符串而忽略某些字符。這可以用'.'來實現。無需涉及任何其他正則表達式功能。 – DavidS

+0

ahh,他編輯了這個問題,並且更清楚地表明他想要'精確'的字符串匹配,而不是'任何字符串匹配這種模式'。那麼是的,這有點多,並且實際上並不完全是他需要的,但是在聰明的時候仍然使用組(即使你以後不使用它們)可以幫助明確正則表達式。 – mawalker