我有多种类型的字符串。如果number text (text)
我想删除括号内的内容。否则不行。
这将删除始终在括号内的所有内容。
/\((.*?)\)/
如何检查前导号码?
\d
匹配任何数字。还有一个比使用不贪婪的重复更好的方法:
/\d\s*\(([^)]*)\)/
如果空格是强制性的,请使用:
/\d\s+\(([^)]*)\)/
如果您不想在 的情况下匹配a1 (text)
,请使用:
/\b\d+\s*\(([^)]*)\)/
但是,对于删除,匹配括号周围的内容可能更容易(我以第一个正则表达式为例,但这可以应用于所有三种情况):
$str = preg_replace('/(\d\s*)\([^)]*\)/', '$1()', $str);
对于第一种情况(如果text
ina1 (text)
也应该删除),并且如果您将空格数量限制为一个,您还可以使用稍微更有效的变体,使用后向:
$str = preg_replace('/(?<=\d\s)\([^)]*\)/', '()', $str);
后视不包括在匹配中,因此不需要捕获。不幸的是,对于 PCRE,后视必须是固定长度的,这就是为什么您不能将其与\d+
或一起使用的原因\s*
。
Use this regex
(\d[^\(\)]*?\().*?(\))
^ ^ ^
| | |->2nd group matches )
| |->matches content within ()
|->1st group would match a digit followed by 0 to many characters(except ())followed by (
and replace it with
$1$2
一起去
$s = preg_replace('/(?<=\d)\s*\([^)]*\)/', '', $s);