我想从字符串中提取一个数字。字符串看起来像这样:
"visaObs(31124228);"
这是我的镜头。它似乎没有得到任何匹配:
preg_match('/visaObs((\d+));/s', $attribute, $match);
echo $match[0]; //undefined offset
有什么想法吗?
答案 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);