测试字符串中的匹配项

时间:2013-05-02 20:02:47

标签: php

我有一个脚本从字符串中抓取所有哈希标记,然后将它们存储在一个数组中,接下来发生的事情取决于字符串中是否有任何哈希标记。如果正在测试的字符串中确实存在哈希标记,如何创建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 个答案:

答案 0 :(得分:1)

preg_match_all()将返回发生了多少匹配(包括0),或者失败时返回布尔值假,所以只是一个简单的:

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

会做的。请注意!==。这是区分真正的布尔false和简单整数0所必需的,当使用标准的非严格==逻辑时,两者都测试相同。

答案 1 :(得分:1)

最简单的检查方法是更改​​行

if ($matches != 0) {

进入

if ($matches[1]) {

检查字符串是否匹配(因为如果数组为空,它将为false)

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

要获得奖金,您可以在testing site i use

上查看您的正则表达式

答案 2 :(得分:0)

匹配是一个数组。

if ( count( $matches[1]) != 0)

答案 3 :(得分:0)

var_dump(array() == 0);

=&GT;

  

布尔(假)

检查:

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

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