【问题标题】: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>'; 

返回的是“数组数组数组数组...”

【问题讨论】:

  • var_dump($num) 是你的答案

标签: 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
                        )
        
                )
        
        )
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2018-05-07
          • 1970-01-01
          • 2013-03-01
          • 2015-02-08
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多