我有多种类型的字符串。如果它像number text (text)
我想删除括号内的内容。否则不是。
这将删除括号内的所有内容。
/\((.*?)\)/
如何查看前导号码?
答案 0 :(得分:2)
\d
匹配任何数字。并且比使用不合理的重复更好:
/\d\s*\(([^)]*)\)/
如果空间是强制性的,请使用:
/\d\s+\(([^)]*)\)/
如果您在a1 (text)
的情况下不想要匹配,请使用:
/\b\d+\s*\(([^)]*)\)/
对于删除,可能更容易匹配括号周围的东西(我使用第一个正则表达式作为示例,但这可以应用于所有三种情况):
$str = preg_replace('/(\d\s*)\([^)]*\)/', '$1()', $str);
对于第一种情况(如果text
中的a1 (text)
也应该被移除),并且如果将空格量限制为1,则还可以使用稍微更有效的变体,使用回顾后:
$str = preg_replace('/(?<=\d\s)\([^)]*\)/', '()', $str);
后卫不包含在比赛中,因此无需捕捉。不幸的是,对于PCRE,lookbehind必须具有固定长度,这就是为什么你不能将它与\d+
或\s*
一起使用。
答案 1 :(得分:1)
使用此正则表达式
(\d[^\(\)]*?\().*?(\))
^ ^ ^
| | |->2nd group matches )
| |->matches content within ()
|->1st group would match a digit followed by 0 to many characters(except ())followed by (
并将其替换为
$1$2
答案 2 :(得分:0)
使用
$s = preg_replace('/(?<=\d)\s*\([^)]*\)/', '', $s);