如果我的数字 = 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
如果需要进一步澄清,请告诉我。
以上是原始问题的一部分。
答案 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
等功能
答案 1 :(得分:0)
$string = '<table><tr><td>432987</td></tr></table>';
$table = new SimpleXMLElement( $string );
echo $table->tr->td; //432987
您无法使用正则表达式解析XML,在这种情况下使用SimpleXMLElement
可以解决您的问题。 this post中的更多信息。