我需要使用php从给定的字符串中提取数字

时间:2016-10-24 13:26:46

标签: php regex preg-match-all

如果我的数字 = 432987以下方法可以使用:

$string = '<table><tr><td>432987</td></tr></table>';

preg_match_all("(\\d{6})", $string, $match);

var_dump($match[0]);

因此上面的代码可以用来获得一些特定的长度,如果我不知道数字的长度那么可能是什么解决方案呢?

需要提取/匹配数字的字符串示例如下:

Snippet 1:
<table><tr><td>432987</td></tr></table>
Snippet 2:
<div>164PE
09983 PO#432987</div>
Snippet 3:
Order 432987IRC
Snippet 4:
432987

如果需要进一步澄清,请告诉我。

以上是原始问题的一部分。

2 个答案:

答案 0 :(得分:2)

我最初没有回答这个问题,但是阅读Tom Lords链接到神秘的Regex parsing of XML让我重新考虑。

正则表达式可用于解析所有显示的示例,因为XHTML是&#34; fluff&#34;并且对于数字的发现完全不重要。是的,XHTML的某些实例可能会连续包含6个数字字符,但这不太可能,并且对于此应用程序的感知规模(即不是复杂或大规模,从给出的片段判断),它&# 39;怀疑这将成为一个问题。

结果输出完全不依赖于任何形式的[X] HTML。

引用:

  

摘录1:

 <table><tr><td>432987</td></tr></table> 
     

摘录2:

  <div>164PE 09983
   PO#432987</div>
     

摘录3:

    Order 432987IRC 
     

摘录4:

     432987

要解决所有这些并返回您丢失的号码 432987 ,您只需执行以下操作:

$string = //whatever from above

preg_match_all("/[0-9]{6}/", $string, $match);

这将匹配任何6位数的字符串而不会中断。
完整证明:

    $string1 = "<table><tr><td>432987</td></tr></table>";
    $string2 = "<div>164PE
09983 PO#432987</div>";
    $string3 = "Order 432987IRC";
    $string4 = "432987"; 
    $string5 = "<html><head><title>Some numbers</title></head>
    <body><h2>Oh my word, this is HTML being attacked by Regex!!!</h2>
    <p>This must be Doooom! 123456</p>
    </body>
    </html>";

    preg_match_all("/[0-9]{6}/", $string5, $match);

print_r($match);

或者,您可以使用正则表达式编号标识符\d,因此:

    preg_match_all("/\d{6}/", $string5, $match);

完全一样。

我假设你想要一个 6位数字,但我怀疑你是否知道这个数字是多少,而且这个数字是静态的,那么它更容易使用PHP字符串查找和替换str_replace等功能

修改:Some Further reading

答案 1 :(得分:0)

$string = '<table><tr><td>432987</td></tr></table>';

$table = new SimpleXMLElement( $string );

echo $table->tr->td; //432987

您无法使用正则表达式解析XML,在这种情况下使用SimpleXMLElement可以解决您的问题。 this post中的更多信息。