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

我需要使用php从给定字符串中提取数字,php,regex,preg-match-all,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]); $string='432987'; preg_match_all(“(\\d{6})”,$string,$match); var_du

如果我的编号=432987,则可以使用以下方法:

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

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

var_dump($match[0]);
$string='432987';
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
片段1:
432987
片段2:
164PE
09983 PO#432987
片段3:
订单432987IRC
片段4:
432987
如果需要更多的澄清,请告诉我

以上是原始问题的编辑部分。

$string='432987';
$table=新的simplexmlement($string);
echo$table->tr->td//432987

您无法使用正则表达式解析XML,请使用
simplexmlement
,因为这种情况将解决您的问题。更多信息请参见。

我本来不打算回答这个问题,但阅读《汤姆·洛兹与神秘主义者》的链接让我重新考虑

正则表达式可用于解析所示的所有示例,因为XHTML是“fluff”,对于数字的查找完全不重要。是的,XHTML的某些实例可能会在一行中包含6个数字字符,但这充其量也不太可能,而且对于这个应用程序的感知规模(即,从给出的代码片段判断,不复杂或庞大),这将是一个值得怀疑的问题

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

引述:

片段1:

 <table><tr><td>432987</td></tr></table> 
片段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);
做完全相同的事情

我假设您想要一个6位数的数字,但我怀疑如果您知道这个数字是什么,并且这个数字是静态的,那么使用PHP字符串查找和替换函数(如等)就更容易了


编辑:。

它是有效的HTML吗?使用DOM解析器。必须链接到预期的内容?代码片段1、2、3和4都返回
432987
。如果#3有
IRC
?@simer,你真的需要澄清你的问题。你到底想“找到”什么?标准是什么?。。所以你想在空格之间找到任意长度的数字和围绕它的任何其他字符,是吗?请编辑您的问题并设置这些关键细节。谢谢。@Simer感谢您的更新,但是您告诉Chris85您的结果应该包含“IRC”txt,但是在您编辑的问题中没有提到这种类型的要求。如果您只需要一些长度
x
数字,我的答案将非常适合您(只需更新
{6}-->{x}
:-)
虽然此代码可能有助于解决问题,但它没有解释为什么和/或如何回答问题。提供这种额外的环境将大大提高其长期教育价值。请在回答中添加解释,包括适用的限制和假设。@jared chu请检查我提到的更新。我提到了要解析的4个不同字符串。这不是我在问题中提到的相同解决方案吗?谢谢。@Simer,你的语法是错误的,但你的想法是一样的。我刚刚演示了该方法适用于所有给定的代码段。如果您已经解决了问题中的问题,为什么要将其发布在StackOverflow上<代码>:-D
     432987
$string = //whatever from above

preg_match_all("/[0-9]{6}/", $string, $match);
    $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);
    preg_match_all("/\d{6}/", $string5, $match);