2017-03-22 119 views
1

如標題所示,我試圖使用preg_replace來刪除不在括號之間的所有內容。刪除除括號之外的字符串中的所有內容

例子:

$item = "We are all words that don't matter! (We do matter!)"; 

這應該然後返回

$item = "We do matter!"; 
+0

你的'preg_replace'嘗試了什麼? – chris85

+0

我試過「/*\((.*?)\).*/」,這對我的大部分字符串都沒有效果。 –

+0

@ObsidianAge我正試圖做相反的事情。 –

回答

1

根本就作爲遵循:

function get_string_between($string, $start, $end){ 
    $string = ' ' . $string; 
    $ini = strpos($string, $start); 
    if ($ini == 0) return ''; 
    $ini += strlen($start); 
    $len = strpos($string, $end, $ini) - $ini; 
    return substr($string, $ini, $len); 
} 

$fullstring = "We are all words that don't matter! (We do matter!)"; 
$shortstring = get_string_between($fullstring, '(', ')'); 

$finalstring = "(".$shortstring.")"; 

echo $finalstring; 

這裏是工作示例:

https://eval.in/759309

就是這樣。

+0

這實際上運行得非常好,雖然它不使用preg_match,但它非常方便!謝謝! –

+0

我很高興它幫助你,請接受這個答案,這將是非常感謝:) –

1

您可以使用正則表達式:[^(]*\(([^)]+)\)[^()]*

您可以在這裏找到一個交代: https://regex101.com/r/2d1TzV/1

你正在試圖提取該文本將在組1

這是使用該正則表達式在PHP的示例代碼捕獲:

<?php 
$item = "We are all words that don't matter! (We do matter!)"; 
$result = preg_filter("/[^(]*\(([^)]+)\)[^()]*/", "$1", $item); 
echo $result; 

在線試用這裏:http://ideone.com/kn3kQo

+0

該表達式不起作用。 –

+0

¿你可以舉一個例子,它不起作用嗎? – Hawkings

+0

idk,它沒有用於我正在使用的字符串是「Derp(Jerk-Derk)」 –

相關問題