【问题标题】:preg_match_all() get a number from a stringpreg_match_all() 从字符串中获取一个数字
【发布时间】:2014-11-03 12:54:41
【问题描述】:
preg_match_all() 是如何工作的?
我想从字符串中得到一个数字:
例如:我有结果:
(62)
我只想要数字。并想对几个字符串这样做。
这就是我所做的尝试:
foreach($html2->find('small[class=menu-item__label__count]') as $aholder) {
$holderdes=$aholder->outertext;
preg_match_all('/([0-9]+)/', $holderdes,$num);
echo $num.'<br>';
返回的是“数组数组数组数组...”
【问题讨论】:
标签:
php
foreach
numbers
preg-match-all
【解决方案1】:
你应该打印$num[0];
foreach($num[0] as $pattern)
// do something with $pattern
你的正则表达式也看起来不对。如果你想匹配(61)你需要做(包括括号):
'/\(([0-9]+)\)/'
【解决方案2】:
如果你有一个像"(62)"这样的字符串
那么你可以使用这个:
<?php
$str = '(62)';
preg_match_all('!\d+!', $str, $matches);
print_r($matches);
?>
输出:
Array
(
[0] => Array
(
[0] => 62
)
)
此外,如果您尝试回显数组 ($num) 却没有得到 errors,请打开错误报告以进行调试!
error_reporting(E_ALL);
ini_set("display_errors", 1);
【解决方案3】:
preg_match 返回一个数组,从documentation 可以看出。
如果你想查看数组的所有内容,请使用
var_dump( $sum );
如果你只需要匹配的,你必须解决那个特定的部分。
查看正则表达式快速参考
- [abc] 单个字符:a、b 或 c
- [^abc] 任何单个字符,但
a、b 或 c
- [a-z] a-z 范围内的任何单个字符
-[a-zA-Z] a-z 或 A-Z 范围内的任意单个字符
- ^ 行首
- $ 行尾
-\A 字符串开头
- \z 字符串结束
- .任意单个字符
- \s 任何空白字符
- \S 任何非空白字符
- \d 任意数字
- \D 任何非数字
- \w 任意单词字符(字母、数字、下划线)
- \W 任何非单词字符
-\b 任何单词边界字符
- (...) 捕获所有包含的内容
- (a|b) a 或 b
- 一个?零个或一个
- a* 零个或多个
- a+ 一个或多个 a
- 一个{3}正好是 3 个
- a{3,} 3 个或多个
- a{3,6} 介于 3 到 6 个之间
【解决方案4】:
这个功能在php.net上完美explained
看看这个从字符串数组中提取数字的非常简单的例子:
<?php
$strings = array ("fHzZGh4JMyfpc5visCC3q1a1ICBLWXnmfxoRa70S9HXHjBSVI4",
"1LRWmzTQBErP6kIqXRLMgzWoVdOJKrLpUbL99sZ3XdtscAvydG",
"5OMbG1hFMrTkMeThw64E80QqfLvxbZjo3tlsVzeJiDCDAn4D6C",
"lrYFqKKtarRHfteYHUDx4KAEjssvs12Ix5u3YGQKATQBxtqAhn",
"W3a3n0jzXtM2l5i8tOVnxPbBeGAz0ChzDQ6qhReQkdHTQ4sLmz");
$nums = array ();
foreach ($strings as $string) {
preg_match_all('/\d+/', $string, $matches);
$nums[] = $matches;
}
print_r($nums);
这是输出:
Array
(
[0] => Array
(
[0] => Array
(
[0] => 4
[1] => 5
[2] => 3
[3] => 1
[4] => 1
[5] => 70
[6] => 9
[7] => 4
)
)
[1] => Array
(
[0] => Array
(
[0] => 1
[1] => 6
[2] => 99
[3] => 3
)
)
[2] => Array
(
[0] => Array
(
[0] => 5
[1] => 1
[2] => 64
[3] => 80
[4] => 3
[5] => 4
[6] => 6
)
)
[3] => Array
(
[0] => Array
(
[0] => 4
[1] => 12
[2] => 5
[3] => 3
)
)
[4] => Array
(
[0] => Array
(
[0] => 3
[1] => 3
[2] => 0
[3] => 2
[4] => 5
[5] => 8
[6] => 0
[7] => 6
[8] => 4
)
)
)