我正在尝试使用preg_match_all从页面获取1个值,我在线尝试(phpliveregex.com),但是当我将它放在我的php脚本中时,它会返回一个空数组(print_r)
这是我正在运行的php代码:
preg_match_all("/(?<=\<td align\=\"right\"\>\$).*(?=\<\/td\>)/", $PageProfit, $profit);
print_r($profit);
//Select 1st of array
$profit = $profit[0][0];
echo $profit;
这是$ PageProfit
的一部分</center><p> </p>
<table align="center" cellpadding="2" cellspacing="0">
<tr class="membertdbold"><td align="center">Date</td>
<td align="center">Buyer</td>
<td align="center">Product</td>
<td align="center">Commission</td>
<td align="center">Status</td>
</tr><tr>
<td align="center">2014-03-14 21:29:41</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-15 18:26:20</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-16 19:50:15</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-17 19:48:12</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-18 19:56:14</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-19 20:52:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-20 21:02:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-21 21:34:05</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-22 21:46:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-23 22:00:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-24 22:06:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-25 23:00:12</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-26 23:30:07</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr>
<td align="center">2014-03-27 09:08:10</td>
<td align="center">N/A</td>
<td align="center">PTC</td>
<td align="center">0.123</td>
<td align="center">Unpaid</td>
</tr><tr class="formlabelbold">
<td colspan="3" align="right">Total Owing:</td>
<td align="right">$1.234</td>
</tr><tr><td colspan="4" > </td></tr></table>
</div></td></tr>
</table>
PHP版本返回的位置:
Array ( [0] => Array ( ) )
并且网站返回: 数组([0] =&gt;数组([0] =&gt; 1.234))
据我所知,我没有遗漏任何错误,也没有E_ALL的警告。有人可以帮我解决这个问题吗?
答案 0 :(得分:1)
在PHP中,使用$some_var
美元符号将字符串/数字变量声明为$
。如果将它们放在双引号(&#34;)中,它仍将其解释为变量。例如:
$some_var = "xyz";
print "$some_var"; // outputs : xyz
但是,如果在变量之前使用\
,它会转义$
符号并输出变量名称。例如这一个。
print "\$some_var"; // outputs : $some_var
注意,上面一行没有打印\$some_var
。要在那里打印另一个斜杠,你必须放置另一个带有转义(\\
)的斜杠。
print "\\\$some_var"; // outputs : \$some_var
这就是为什么在正则表达式中,在双引号内,\$
简单解释为$
。
所以你在这个阶段有几个解决方案。
\\
。所以它将是\\\$
'
)中,如'/...../'
$
放置在角色类[]
内,这样[$]
答案 1 :(得分:0)
这真的很奇怪......似乎美元符号无法正常逃脱。 您可以像这样修改正则表达式:
preg_match_all("/(?<=\<td align\=\"right\"\>[$]).*(?=\<\/td\>)/", $PageProfit, $profit);