繁体   English   中英

PHP从字符串中获取前三个单词

[英]PHP Get first 3 words from string

下面的代码拆分一个字符串,并选择所有包含最少3个字母的字母数字单词。 但是,我不想从字符串中获取所有单词,而是只获取前3个有效单词,但是问题出在循环上。 从字符串中找到3个有效单词后,如何停止循环。

PS。 如果对同一件事有替代方法,请提出建议。 谢谢。

$string = "test test TEST test- -test _test blsdk.bldf,las";

$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
foreach ($keywords as $keyword){
            if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
                    echo $keyword;
                    echo "<br />";
            }
        }

添加一个变量,该变量在找到匹配的关键字时开始计数。 当计数器达到最大值时,中断foreach循环

$string = "test test TEST test- -test _test blsdk.bldf,las";

$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
$i=0;
foreach ($keywords as $keyword){
            if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
                    echo $keyword;
                    echo "<br />";
                    $i++;
                    if ($i==3) break;
            }
        }

我认为您需要使用'break'关键字,请尝试使用此代码(未经测试的代码)-

$string = "test test TEST test- -test _test blsdk.bldf,las";

$arr = preg_split('/[,\ \.;]/', $string);
$keywords = array_unique($arr);
$counter = 0;
foreach ($keywords as $keyword){
            if ((preg_match("/^[a-z0-9]/", $keyword) ) && (strlen($keyword) > 3)){
                    echo $keyword;
                    echo "<br />";
                    $counter = $counter + 1;
                    if ($counter == 3) break;
            }
        }

只是切断其余部分。

array_splice($arr, 3);

我会使用另一种方法,当您使用正则表达式检查结果时,使用preg_match_all为您完成工作可能更清楚,也可能效率更高。

<?php
$string = "test le  test TEST test- -test _test blsdk.bldf,las";

$arr=array();
preg_match_all('/\b([0-9A-Za-z]{3,})\b/', $string, $arr);
$keywords = array_slice(array_unique($arr[0]),0,3);
echo join('<br/>', $keywords);

在问题中,您要选择一个最小长度为3的单词,但要使用> 3测试它们的长度。 如果需要,相应地更改正则表达式。

注意:使单词与原始测试相同。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM