从字符串中提取数字

时间:2014-01-01 23:31:45

标签: php regex

我想从字符串中提取一个数字。字符串看起来像这样:

"visaObs(31124228);"

这是我的镜头。它似乎没有得到任何匹配:

preg_match('/visaObs((\d+));/s', $attribute, $match);
echo $match[0]; //undefined offset

有什么想法吗?

4 个答案:

答案 0 :(得分:2)

你必须逃避字面括号:

/visaObs\((\d+)\);/

不需要s修饰符,结果在$match[1],因为它是第一个捕获组。

答案 1 :(得分:1)

在正则表达式中,括号是一个特殊字符。你应该绕数字

转义括号
preg_match('/visaObs\((\d+)\);/s', $attribute, $match);

答案 2 :(得分:1)

您必须退出()

preg_match('/visaObs[(](\d+)[)];/s', $attribute, $match);

示例:

$ cat /tmp/1.php
<?
$attribute = "visaObs(31124228);";
preg_match('/visaObs[(](\d+)[)];/s', $attribute, $match);
print $match[1];
?>
$ php /tmp/1.php
31124228

如果提供了matches,则会填充搜索结果。 $matches[0]将包含与完整模式匹配的文本,$matches[1]将具有与第一个捕获的带括号的子模式匹配的文本,依此类推。

答案 3 :(得分:1)

您可以通过匹配任意数量的数字来找到该数字,并包括它应包围的内容:

preg_match('/(?<=visaObs\()\d+(?=\))/', $attribute, $match);
var_dump($match);