2013-07-04 88 views
0

我正在構建一個正則表達式,它將幫助我識別匹配的第一個匹配項。正則表達式僅用於匹配第一次匹配的匹配

我現在的正則表達式是"(.*)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*)"

我所試圖做的是找到,如果輸入的字符串包含單詞「案例」(不區分大小寫),然後任意數量的特殊字符,後面跟一個數字; 我想檢索文本的3個部分。 說我的輸入字符串是"RE: FW: case:-1234: there is some description" 使用此正則表達式,我能夠檢索,"RE: FW: ""1234""there is some description"

這是正常的,但如果我輸入的字符串 "RE: FW: case:-1234: This is in reference to case 789 reopening" 然後我正則表達式的回報,"RE: FW: case:-1234: This is in reference to""789""reopening"

我想得到的是"RE: FW: ""1234","This is in reference to case 789 reopening"

我是一個正則表達式的新手,所以任何幫助,非常感謝。

注:我正在研究一個基於java的工具,所以java兼容的正則表達式會很好。

回答

1

使用(?i)不區分大小寫的匹配時你的正則表達式已經對整個字符串匹配(即做它使用matches)?如果沒有(或者你可以選擇使用find代替)只需卸下(.*),因爲這是你的推背匹配:

[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]* 

否則,使領先的重複非貪婪;

(.*?)[Cc][Aa][Ss][Ee][^a-zA-Z\\d]*(\\d\\d*)[^a-zA-Z\\d]*(.*) 

順便說一下,您可以使用不區分大小寫的匹配來簡化此操作。如果你不能在你的工具中激活它,你可以在正則表達式中使用它:

(?i)(.*?)case[^a-z\\d]*(\\d+)[^a-z\\d]*(.*) 

請注意,我也簡化了數字。 +表示發生1次或多次。

+0

感謝您的快速響應。它完美的作品 – jerunjose

0

你失蹤?

你的正則表達式將是

(?i)(.*?)case[^a-z\d]*(\d+)(.*) 

您可以切換在正則表達式