Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从字符串中提取数字_Php_Regex - Fatal编程技术网

Php 从字符串中提取数字

Php 从字符串中提取数字,php,regex,Php,Regex,我想从字符串中提取一个数字。字符串看起来像这样: "visaObs(31124228);" 这是我的机会。它似乎没有得到任何匹配: preg_match('/visaObs((\d+));/s', $attribute, $match); echo $match[0]; //undefined offset 有什么想法吗?在正则表达式中,括号是一个特殊字符。你应该在数字周围用括号转义 preg_match('/visaObs\((\d+)\);/s', $attribute, $match)

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

"visaObs(31124228);"
这是我的机会。它似乎没有得到任何匹配:

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

有什么想法吗?

在正则表达式中,括号是一个特殊字符。你应该在数字周围用括号转义

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

在正则表达式中,括号是一个特殊字符。你应该在数字周围用括号转义

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

必须转义文字括号:

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

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

您必须转义文字括号:

/visaObs\((\d+)\);/
不需要s修饰符,您的结果是
$match[1]
,因为它是第一个捕获组。

您必须转义

例如:

$ cat /tmp/1.php
<?
$attribute = "visaObs(31124228);";
preg_match('/visaObs[(](\d+)[)];/s', $attribute, $match);
print $match[1];
?>
$ php /tmp/1.php
31124228
$cat/tmp/1.php
$php/tmp/1.php
31124228
如果提供了
匹配项
,则它将填充搜索结果
$matches[0]
将包含与完整模式匹配的文本,
$matches[1]
将包含与第一个捕获的括号子模式匹配的文本,依此类推

您必须转义

例如:

$ cat /tmp/1.php
<?
$attribute = "visaObs(31124228);";
preg_match('/visaObs[(](\d+)[)];/s', $attribute, $match);
print $match[1];
?>
$ php /tmp/1.php
31124228
$cat/tmp/1.php
$php/tmp/1.php
31124228
如果提供了
匹配项
,则它将填充搜索结果
$matches[0]
将包含与完整模式匹配的文本,
$matches[1]
将包含与第一个捕获的括号子模式匹配的文本,依此类推

您只能通过匹配任意数量的数字来查找数字,并包括数字周围的内容:

preg_match('/(?<=visaObs\()\d+(?=\))/', $attribute, $match);
var_dump($match);
preg_match('/(?通过匹配任意数量的数字,只能找到数字,并包括数字周围的内容:

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

preg\u match('/(?谢谢。你能告诉我如何使用结果吗?
$match[0]
$match[1]
似乎没有定义。@Johan:
$match[1]
。请看我的答案;我已经更新了。Sweet.
$match[1]
如果字符串不匹配,则为空?@Johan:是的。如果
的话,您也可以用
检查preg\u match的结果。谢谢。您能告诉我如何使用结果吗?
$match[0]
$match[1]
似乎没有定义。@Johan:
$match[1]
。请看我的答案;我已经更新了。Sweet.
$match[1]
如果字符串不匹配,则为空?@Johan:是的。如果