2011-04-26 164 views
1

內容使用的preg_match我怎樣才能得到支架獲取從支架

實例之間的字符串:sdsdds(sdsd)sdsdsd

我想

sdsd

回答

7
preg_match('/\(([^\)]*)\)/', 'sdsdds (sdsd) sdsdsd', $matches); 
echo $matches[1]; // sdsd 

匹配字符。如果你想匹配多個實例,你可以使用preg_match_all。

+0

嗨,如果我想得到第二次發生而不是第一次,怎麼辦? – floCoder 2015-02-10 23:18:48

3

最簡單:

#\(([^\)]+)\)# 

這不是很可讀的,因爲所有的()必須\轉義。

#是分隔符。

使用preg_match:括號中,包括空值內

$str = 'sdsdds (sdsd) sdsdsd'; 
$iMatches = preg_match('#\(([^\)]+)\)#', $str, $aMatches); 
echo $aMatches[1]; // 'sdsd' 
4
preg_match('/\((.*?)\)/', $text, $a); 
echo $a[1]; 
+1

使用'.'和'*?'不是很有效。在這種情況下''[^ \]]'要快得多。 – Rudie 2011-04-26 18:10:40

+0

這是大麥更快。我可以在1000次'preg_match()'迭代中節省1ms。 http://pastebin.com/9XEEHjZ3 – 2011-04-26 18:19:25

+0

的確如此,但您可以將其稱爲「最佳實踐」,以儘可能高效地編寫正則表達式(以及通用代碼)。大多數正則表達式手冊實際上都指出了這一點:儘可能少地使用'.'。 – Rudie 2011-04-26 18:23:59