【问题标题】:if preg_match finds nothing echo something [duplicate]如果 preg_match 什么也没找到
【发布时间】:2019-09-29 14:16:28
【问题描述】:

这是我的代码:

function getaname($name)
{
    $result = file_get_contents('https://www.something.com');
    $regex = '/<div class="classname">([^<]*)<\/div>/';
    if (preg_match($regex, $result, $matches)) {   
        return $matches[1]; 
    } else{
        return 'N/A';}
}

preg_matchdiv 中找到某些东西时,此代码运行良好,但我希望它在echo 或在它在潜水中找不到类似的东西时返回N/A

<div></div>

【问题讨论】:

  • N/A 周围有报价吗?
  • 旁注,如果函数的执行是一致的,它会更简洁一些,这意味着最好返回falseNULL而不是echo。您可能正在检查返回的值是一个数组这一事实,因此您不妨回显以响应返回。
  • 好吧,我可以在我的文本中保留 N/A,所以如果它什么也没找到,它不会返回空的 div,但它确实......我想要的是:如果 preg_match 找到 0 个字符它不返回任何内容的 div ,因此 N/A 的原始文本会保留并且不会像现在那样消失

标签: php return preg-match


【解决方案1】:

我想你没有准确解释条件,我想你检查空的div,在你的情况下是&lt;div class="classname"&gt;&lt;/div&gt;

在这种情况下,您的正则表达式仍然会发现 &lt;div class="classname"&gt;preg_match 返回真值。因此,在这种情况下,您还需要检查 $matches[1] 是否为空:

if (preg_match($regex, $result, $matches) && !empty($matches[1])) {
    return $matches[1]; 
} else {
    return 'N/A';
}

这是一个小提琴https://3v4l.org/XUvUD,取消注释$result 行并查看每种情况下的输出。

或者您的正则表达式可以更改为$regex = '/&lt;div class="classname"&gt;([^&lt;]+)&lt;\/div&gt;/';,请参阅plus 而不是*,这意味着“至少一个符号”。在这种情况下,不应更改其余代码。再次在这里摆弄https://3v4l.org/Eo1bF

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-12-18
    • 2018-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2011-02-04
    相关资源
    最近更新 更多