有人可以告诉我为什么这会返回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;}}
}
答案 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;