foreach()没有做好自己的工作

时间:2014-08-16 05:23:06

标签: php regex

有人可以告诉我为什么这会返回false,就像没有破坏脚本并发出警报一样?首先,我希望匹配任何类似回复的内容,例如“@mark,你好吗?”在$comment字符串中,并返回$matches数组中的匹配项。然后,对于发现的每个匹配,我想要使用在同一帖子上发表评论的用户名搜索数组。

if( preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/', $comment, $matches) ) {
    foreach( $matches as $userName ) {
        if( in_array($userName, $commentUsers) ) {
            echo "<script>
            alert('Success!');
            </script>";
            exit;
        }
    }
} 

修改

新代码......仍然返回错误

if( preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/', $comment, $matches) ) {


        foreach( $commentUsers as $userName ) {     
if(strcmp(strtolower($userName),strtolower($matches[1])))

{print("SUCCESS!"); 
exit;}}
    }  

4 个答案:

答案 0 :(得分:1)

直接从索引1获取匹配的组。 Online demo

<?php
    $sourcestring="@mark, how are ya?";
    preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/',$sourcestring,$matches);
    echo "<pre>".print_r($matches,true);
?>

$matches Array:
(
    [0] => @mark
    [1] => mark
)

答案 1 :(得分:0)

试试这个:

    <?php

        $source="this is @me string";
        preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/',$source,$matches);
       foreach($matches as $found){
echo "<pre>";
        print_r($found);
echo "</pre>";
       }
    ?>

或者

<?php

    $source="this is @me string";
if( preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/', $source, $matches) ) {

        if( $matches ) {
            echo "<script>
            alert('Success!');
            </script>";
            exit;
    }
} 

答案 2 :(得分:0)

然后问题出现在preg_match$commentUsers数组结构中。你可以抛弃它,以便我们可以看到。

我尝试了这段代码并且有效。

$sourcestring="@mark how are you";
preg_match('/(?<![\w@])@([\w@]+(?:[.!][\w@]+)*)/', $sourcestring,   $matches);
echo "<pre>".print_r($matches,true);
$commentUsers[] = "mark";
foreach( $matches as $userName ) {
    if( in_array($userName, $commentUsers) ) {
        echo "<script>
        alert('Success!');
        </script>";
        exit;
    }
}

答案 3 :(得分:-2)

如果你想打破使用的循环

break;

如果你想退出循环并继续使用:

continue;