如何同时删除括号和括号内带有空白的文本(如果存在)?

sno*_*s74 -2 php regex

我正在尝试使用以下代码在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)

使用来自解决方案这个这个问题,目前还不清楚如何删除这两个一个类型匹配,另一个同时在他们面前卸下可选空白。

Wik*_*żew 6

这里有四个要点:

  • 括号之间的字符串可以与 \([^()]*\)
  • 方括号之间的字符串可以匹配\[[^][]*](或者,\[[^\]\[]*\]如果您更喜欢转义文字[],在PCRE中,它是样式,但是在其他一些正则表达式中,则可能是必须的)
  • 您需要交替以匹配此模式或该模式,并在这些模式之前考虑任何空格
  • 由于删除这些字符串后,您可能会获得前导和尾随空格,因此需要使用trim该字符串。

您可以使用

$string = "Deadpool 2 [Region 4](Blu-ray)";
echo trim(preg_replace("/\s*(?:\[[^][]*]|\([^()]*\))/","", $string)); 
Run Code Online (Sandbox Code Playgroud)

请参阅regex演示PHP演示

\[[^][]*]部分相匹配的字符串之间[]不具有其他[]内部和\([^()]*\)之间的匹配的字符串()具有内没有其他括号。trim删除前导/尾随空格。

正则表达式和说明:

在此处输入图片说明

  • \s* -0+空格
  • (?:-一个非捕获组的开始
    • \[[^][]*]- [,除[和以外的零个或多个字符](请注意,如果][在JS中的Initial 紧接在后,则可以将这些括号放在PCRE模式中不转义的字符类中,请务必]使用所有方法来转义,[^\][]*
    • |-或(交替运算符
    • \([^()]*\)- (()和以外的任何0+个字符)
  • ) -非捕获组的结尾。