php - 如何同时删除括号和括号内的文本以及之前的任何空格(如果存在)?
问题描述
我正在尝试使用以下代码清理 PHP 中的字符串,但我不确定如何同时删除括号和括号内的文本以及之前的任何空格(如果存在)。
我正在使用的代码是:
$string = "Deadpool 2 [Region 4](Blu-ray)";
echo preg_replace("/\[[^)]+\]/","",$string);
我得到的输出是:
Deadpool [](Blu-ray)
但是,所需的输出是:
Deadpool 2
解决方案
这里有四个要点:
- 括号之间的字符串可以匹配
\([^()]*\)
- 方括号之间的字符串可以匹配
\[[^][]*]
(或者\[[^\]\[]*\]
如果您更喜欢转义文字[
和]
,在 PCRE 中,它是风格的,但在其他一些正则表达式风格中,它可能是必须的) - 您需要交替匹配这个或那个模式,并在这些模式之前考虑任何空格
- 由于删除这些字符串后,您可能会得到前导和尾随空格,因此您需要
trim
字符串。
您可以使用
$string = "Deadpool 2 [Region 4](Blu-ray)";
echo trim(preg_replace("/\s*(?:\[[^][]*]|\([^()]*\))/","", $string));
该\[[^][]*]
部分匹配介于[
和]
没有其他[
和]
内部的\([^()]*\)
字符串,并匹配介于(
和)
没有其他括号之间的字符串。trim
删除前导/尾随空格。
正则表达式图和解释:
推荐阅读
- c++ - 如何将qml a textField的文本转换为float和int
- android - xamarin android:httpclient PostAsync
- c# - 类和接口比较c#
- sql - 在 SQL 中计算分组日期
- awk - awk:多行排序和删除在 RS 中无法正常工作
- android - Firestore toObject 很慢
- r - 用R转换ASCII码中的字符矩阵
- python - 如何在 x 处修复 NoReverseMatch?
- reactjs - 如何解析 react-i18next 中的对象列表?
- asp.net - 使用 Umbraco 重写时如何删除查询字符串