2016-03-01 93 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