我要做的是删除字符串中可能包含的第二组或最后一组括号。
$string = "Some text here (Some Text I want) (Title: Some Text I don't)";
echo preg_replace("/\([^)]+\)/","",$string);
我的正则表达式不太好所以这个例子删除了所有的括号,但我只希望删除最后一个集合。
输出应为Some text here (Some Text I want)
请注意,如果有最后一个,:
总是有not
。如果只有一组括号,则应Some text here (Some Text I want)
将其删除。所以,如果我已经{{1}}它应该保持这种状态。
任何帮助都很棒。
答案 0 :(得分:4)
你的正则表达式几乎就在那里,但你可以使用负向前瞻:
$string = "Some text here (Some Text I want) (Title: Some Text I don't)";
echo preg_replace("/\s*\([^)]+\)(?![^(]*\()/", "", $string);
// Some text here (Some Text I want)
<强> Regex Demo 强>
答案 1 :(得分:2)
这样做:
$replaced = preg_replace('~^[^(]*\([^)]+\).*\K\([^)]+\)~', '', $yourstring);
在the demo中,注意如何仅选择第二组括号(以及可选空格)。我们用空字符串替换它。
<强>解释强>
^
锚点断言我们位于字符串的开头[^(]*
匹配任何不是第一个左括号的字符\([^)]+\)
匹配第一组句子.*
贪婪地匹配任何东西,然后回溯到最后一组文章\K
告诉引擎放弃与其返回的最终匹配项目匹配的内容\([^)]+\)
匹配最后一个括号答案 2 :(得分:1)
我会确定最后一个索引(然后删除之后的所有内容。
使用strrpos来达到这个效果。该功能记录在此处:http://www.php.net/manual/en/function.strrpos.php
答案 3 :(得分:1)
仅当a)有多组括号且b)最后一组括号包含冒号时,才会删除最后一组括号。
function removeLastParenthesis($string) {
if(strpos($string,'(') === strrpos($string,'('))
return $string;
$beginning = substr($string,0,strrpos($string,'('));
$end = substr($string,strrpos($string,'('));
$end = preg_replace('/\([^\)]*:[^\)]*\)/','',$end);
return $beginning . $end;
}
答案 4 :(得分:0)
试试这个
preg_replace('/\(\w+\:.*?\)/', '', 'Some text here (Some Text I want) (Title: Some Text I don\'t)');
输出
'Some text here (Some Text I want) '
-note-我假设“注意总是有:在最后一个,如果它在那里。”是的,并且:在:之前的部分将仅包含a-zA-Z0-9_,如在OP的示例中那样。
您可能也想删除尾随空格。用于那个用途
preg_replace('/\s*\(\w+\:.*?\)/', '', 'Some text here (Some Text I want) (Title: Some Text I don\'t)');
<强> Explination:强>
如果这总是带有结尾的单行)在字符串的末尾,你可以添加一个$来将它锚定到最后。 /\s*(\w+@@.*?)$/
这是一个更强大的替代方案
preg_replace('/\s*\([^:]+\:[^(]+\)$/', '', '(dont:remove:me) (do : remove : me)');
输出
'(dont:remove:me)'
答案 5 :(得分:0)
您也可以在没有正则表达式的情况下执行此操作:
$string = "Some text here (Some Text I want) (Title: Some Text I don't)";
if(substr_count($string, '(') > 1 && substr_count($string, ')') > 1){
$string = substr($string, 0, strrpos($string, '(')).substr($string, strrpos($string, ')') + 1);
}