0

我有一个脚本,它从一个字符串中获取所有哈希标签,然后将它们存储在一个数组中,接下来发生的事情取决于字符串中是否有任何哈希标签。如果正在测试的字符串中确实存在哈希标记,如何创建 if 语句以仅运行代码。

这是我尝试过的:

<?php

$string= "Went for an awesome bike";

echo $string . "</br></br>";

preg_match_all('/#(\w+)/',$string, $matches);


if ($matches != 0) {

    foreach ($matches[1] as $tag) {

        echo $tag . "</br></br>";

    }

}
else {

    echo "There are no tags here!!";

}


?>

我不能让它回显失败消息?我可能做错了什么?

谢谢!

4

4 回答 4

1

检查的最简单方法是更改​​您的线路

if ($matches != 0) {

进入

if ($matches[1]) {

检查您的字符串上是否有匹配项(因为如果数组为空则为假)

如果您正在验证,您可以var_dump($matches);查看preg_match_all()返回的内容

作为奖励,您可以在我使用的测试站点上检查您的正则表达式

于 2013-05-02T20:22:42.247 回答
1

preg_match_all()将返回进行了多少匹配(包括 0),或者失败时返回布尔值 false,所以很简单:

$cnt = preg_match_all(...);
if (($cnt !== FALSE) && ($cnt > 0)) {
    ... found something ...
}

会做。注意!==. 这是区分真正的 booleanfalse和简单的 integer所必需的,当使用标准的非严格逻辑0时,两者测试为相等。==

于 2013-05-02T20:06:36.957 回答
0

匹配是一个数组。

if ( count( $matches[1]) != 0)
于 2013-05-02T20:06:24.070 回答
0
var_dump(array() == 0);

=>

布尔(假)

检查:

 if (!empty($matches[0]))

因为数组$matches总是至少填充一项;但这个数组的条目并不总是。

于 2013-05-02T20:07:18.607 回答