从数组中仅获取数字(无日期)并按顺序将它们存储在新的array.Regex中

时间:2015-03-03 09:58:39

标签: html arrays regex

我有一个包含下一个内容的数组:

Array(
[0] => <tr><td>29/06/2015</td><td>19:35</td><td>12345 Column information</td><td>67899 Column information</td><td>Information</td><td>More information</td></tr>
[1] => <tr><td>12/03/2015</td><td>10:12</td><td>98545 Column information</td><td>67659 Column information</td><td>Information</td><td>More information</td></tr>
[2] => <tr><td>11/02/2015</td><td>12:40</td><td>59675 Column information</td><td>94859 Column information</td><td>Information</td><td>More information</td></tr>
[3] => <tr><td>01/01/2015</td><td>20:12</td><td>69365 Column information</td><td>78464 Column information</td><td>Information</td><td>More information</td></tr>
)

如何才能将数字存储在第三和第四列? 我想要做的是将这些数字存储在一个数组中以执行脚本:

shell_exec("addnewgroups 12345 67899");
shell_exec("addnewgroups 98545 67659");
shell_exec("addnewgroups 59675 94859");
shell_exec("addnewgroups 69365 78464");

我尝试使用:preg_replace(&#39; / \ D + /&#39;,&#39;&#39;,$ var); 但是不想拍日期和时间数字! :\

提前多多感谢!!

预期产出:

12345, 67899 
98545, 67659 
59675, 94859 
69365, 78464 

或直接使用脚本:

addnewgroups 12345 67899; 
addnewgroups 98545 67659; 
addnewgroups 59675 94859; 
addnewgroups 69365 78464;

2 个答案:

答案 0 :(得分:0)

如果结构始终相同(第三和第四列),请使用此正则表达式:

<td>.*?<td>.*?<td>(\d+).*<td>(\d+).*<td>

regex101中查看它。

答案 1 :(得分:0)

您可以将以下正则表达式与preg_replace一起使用,然后将匹配替换为\1 \2

.*?(\d+)\s.*?(\d+)\s.*

(\d+)\s捕获一个或多个后跟空格的数字。因此它不会匹配除空格之外的任何其他数字。用组索引1(第一个数字)和组索引2(第二个数字)中的字符替换所有匹配的字符将为您提供所需的输出。

DEMO

$re = "/.*?(\\d+)\\s.*?(\\d+)\\s.*/m";
$str = "<tr><td>29/06/2015</td><td>19:35</td><td>12345 Column information</td><td>67899 Column information</td><td>Information</td><td>More information</td></tr>";
$subst = "$1, $2";
$result = preg_replace($re, $subst, $str);