0

我有多种类型的字符串。如果number text (text)我想删除括号内的内容。否则不行。

这将删除始终在括号内的所有内容。

/\((.*?)\)/

如何检查前导号码?

4

3 回答 3

2

\d匹配任何数字。还有一个比使用不贪婪的重复更好的方法:

/\d\s*\(([^)]*)\)/

如果空格是强制性的,请使用:

/\d\s+\(([^)]*)\)/

如果您不想在 的情况下匹配a1 (text),请使用:

/\b\d+\s*\(([^)]*)\)/

但是,对于删除,匹配括号周围的内容可能更容易(我以第一个正则表达式为例,但这可以应用于所有三种情况):

$str = preg_replace('/(\d\s*)\([^)]*\)/', '$1()', $str);

对于第一种情况(如果textina1 (text)也应该删除),并且如果您将空格数量限制为一个,您还可以使用稍微更有效的变体,使用后向:

$str = preg_replace('/(?<=\d\s)\([^)]*\)/', '()', $str);

后视不包括在匹配中,因此不需要捕获。不幸的是,对于 PCRE,后视必须是固定长度的,这就是为什么您不能将其与\d+或一起使用的原因\s*

于 2012-11-03T17:14:08.817 回答
1

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
于 2012-11-03T17:16:17.257 回答
0

一起去

$s = preg_replace('/(?<=\d)\s*\([^)]*\)/', '', $s);
于 2012-11-03T17:44:48.350 回答