正则表达式中括号内的匹配编号

时间:2010-08-27 21:16:13

标签: php regex

我有一个可能包含单词,数字等的文本。我想要的是匹配括号内的数字,但不要像这样匹配它们:

  

Lorem 43 ipsum dolor 1坐下来(355)一些   其他文字。

我想匹配数字355,但由于有数字没有括号,我得到这个:

\(\b\d+\b\) - 1st variant
\(.+?\)     - 2nd variant

据推测我得到了(355),但我的php脚本已经处于高负荷状态,匹配删除括号不是一个选项。

2 个答案:

答案 0 :(得分:3)

如果您愿意,可以删除第一个中的\b;他们不会伤害任何东西,但他们是多余的。要捕获数字并排除括号,请在数字周围使用未转义的括号:

\((\d+)\)

这将捕获数字供以后使用。例如:

preg_match('/\((\d+)\)/', $sentence, $matches);
var_dump($matches[1]);

答案 1 :(得分:0)

只是匹配您的第一个变体,但只捕获组中的数字,如此

\((\d+)\)

我认为PHP支持命名的捕获组,所以你可以命名它,所以你不是通过索引来查找它,就像我想的那样

preg_match('/\((?<MatchedNumber>\d+)\)/', $searchText, $groups);
print_r($groups['MatchedNumber']);