我正在尝试使用以下代码在PHP中清除字符串,但是我不确定如何在使用空格之前同时删除括号和括号内的文本。
我使用的代码是:
$string = "Deadpool 2 [Region 4](Blu-ray)";
echo preg_replace("/\[[^)]+\]/","",$string);
Run Code Online (Sandbox Code Playgroud)
我得到的输出是:
Deadpool [](Blu-ray)
Run Code Online (Sandbox Code Playgroud)
但是,所需的输出是:
Deadpool 2
Run Code Online (Sandbox Code Playgroud)
这里有四个要点:
\([^()]*\)\[[^][]*](或者,\[[^\]\[]*\]如果您更喜欢转义文字[和],在PCRE中,它是样式,但是在其他一些正则表达式中,则可能是必须的)trim该字符串。您可以使用
$string = "Deadpool 2 [Region 4](Blu-ray)";
echo trim(preg_replace("/\s*(?:\[[^][]*]|\([^()]*\))/","", $string));
Run Code Online (Sandbox Code Playgroud)
的\[[^][]*]部分相匹配的字符串之间[和]不具有其他[和]内部和\([^()]*\)之间的匹配的字符串(和)具有内没有其他括号。trim删除前导/尾随空格。
正则表达式图和说明:
\s* -0+空格(?:-一个非捕获组的开始:
\[[^][]*]- [,除[和以外的零个或多个字符](请注意,如果]是[在JS中的Initial 紧接在后,则可以将这些括号放在PCRE模式中不转义的字符类中,请务必]使用所有方法来转义,[^\][]*)|-或(交替运算符)\([^()]*\)- (,(和)和以外的任何0+个字符)) -非捕获组的结尾。