2017-03-22 124 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)” –

相关问题