php中的preg_match():将匹配存储在变量中

时间:2016-06-07 07:46:20

标签: php

这是代码:

<?php
$eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512";

if(preg_match("/^[0-9]\.[0-9]{1,}x[0-9]$/",$eqn1,$vx1))
{
echo "X1 is:". $vx1[0];
echo "Match found.";
}
else 
echo "Match not found.";
?>

输出:     匹配未找到。

在这里,我试图提取x1的值(即0.068683000000003)并将其存储在变量&#39; $ vx1&#39;中。它总是返回,&#34;匹配未找到。&#34;。我的代码出了什么问题?如果您发现任何错误,请提供解决方案。 感谢。

3 个答案:

答案 0 :(得分:0)

这应该可以解决问题:

  <?php
    $eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512";

    preg_match("/^[0-9]\.[0-9]{1,}/",$eqn1,$vx1);
    print_r($vx1);

答案 1 :(得分:0)

您的正则表达式工作正常,但您必须删除^$字符。您还必须在要捕获的组周围放置括号。

if(preg_match("/([0-9]\.[0-9]*)x[0-9]$/",$eqn1,$vx1))

字符^$意味着捕获仅包含所附正则表达式的行。但是你的线路只包含这个数字。 如果你想以任何方式使用它们,你必须将正则表达式扩展为这样的东西:

^.*="([0-9]\.[0-9]*)x[0-9].*$

请参阅此处http://regexr.com/3diqc了解工作示例。

答案 2 :(得分:0)

<?php
$eqn1="0.068683000000003x1+2.046124y1+-0.4153z1=0.486977512";

if(preg_match("/(?<vx1>^[0-9]\.[0-9]{1,})x[0-9]/", $eqn1, $vx1)) {
    echo "X1 is:". $vx1['vx1']. "\n";
    echo "Match found.";**strong text**
} else  {                                                                                                                                                                                                         
    echo "Match not found.";
}

结果

X1 is:0.068683000000003x1
Match found.array(3) {
  [0]=>
  string(19) "0.068683000000003x1"
  ["vx1"]=>
  string(17) "0.068683000000003"
  [1]=>
  string(17) "0.068683000000003"
}

常规错误:if(preg_match(“/ ^ [0-9]。[0-9] {1,} x [0-9] $ / ”,$ eqn1,$ VX1))