从看起来像带有 1 个参数的函数调用的字符串中提取数字

问题描述 投票:0回答:5

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

"visaObs(31124228);"

这是我的尝试。似乎没有得到任何匹配:

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

有什么想法吗?

php regex string text-extraction
5个回答
2
投票

您必须转义括号:

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

不需要 s 修饰符,并且您的结果位于

$match[1]
中,因为它是第一个捕获组。


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]
将包含与第一个捕获的带括号的子模式匹配的文本,依此类推。


1
投票

在正则表达式中,括号是一个特殊字符。您应该避开数字周围的括号

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

1
投票

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

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

0
投票

您不必被迫使用正则表达式或 preg_ 函数来扫描此可预测格式的文本。作为提取过程的一部分,

sscanf()
甚至可以将子字符串转换为整数。不需要转义括号,也不需要匹配数组。

代码:(演示

$str = 'visaObs(31124228);';
sscanf($str, 'visaObs(%d)', $integer);
var_export($integer);  // 31124228
© www.soinside.com 2019 - 2024. All rights reserved.