2014-01-22 80 views
2

字符串"abcd[ram]xyz"內的與"[ram]"(用括號括起的內容)匹配的正則表達式爲"\[(.*?)\]"。在同一個字符串內匹配"ram"(方括號內的內容)的正則表達式是什麼?用於匹配方括號內的字符串的正則表達式

+3

獲取'group 1'。 –

+2

你的意思是字符串必須包含'[ram]'? 如果是這樣,那麼匹配就是'「。* \ [ram \]。*」'。 –

+0

@RohitJain請解釋一下。我正在使用'matcher.group()'。使用'matcher.group(1)'拋出'IndexOutOfBoundsException'。 – Jay

回答

3

正則表達式到字符串"abcd[ram]xyz"內匹配"[ram]""\[(.*?)\]"

它,但不願量詞的存在?使得它rather inefficient one。更好的表達方式是

\[([^\]]*)\] 

此修改可避免回溯,使其成爲更高效的正則表達式。

在同一個字符串內匹配"ram"(方括號內的內容)的正則表達式是什麼?

這就是表達!所有你需要的是從比賽拉組號1:「[(。*?)]」

Pattern p = Pattern.compile("\\[([^\\]]*)\\]"); // Note how slashes need double-escaping in Java 
Matcher m = p.matcher("abcd[ram]xyz"); 
if (m.find()) { 
    System.out.println(m.group(1)); 
} 

Demo on ideone.

+0

如果我還想要方括號,該怎麼辦 – Akshay

+1

@Akshay移動在所需部分周圍捕獲括號。 – dasblinkenlight

0

你可以使用相同的正則表達式,然後提取子串(擺脫字符串中的第一個和最後一個字符)。或者只搜索「ram」。

1

你可以嘗試使用向前看和向後看:

(?<=\[)(.*)(?=\]) 
0

使用後面一看,向前看:

(?<=\[).*?(?=\]) 

因爲外觀變通不消耗輸入時,整個匹配是方括號內的內容(不需要羣組)

相關問題