【问题标题】:How I can delete words if word have this letters如果单词有这些字母,我如何删除单词
【发布时间】:2023-03-22 08:30:02
【问题描述】:

如果单词中有字母“ц”、“щ”、“ы”、“ь”,我必须删除单词。我为需要我创建了这个函数,但它运行缓慢。

public function CheckToInsert($text)
{

 $xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ");

 foreach ($xarfho as $xarf) 
 {
     if (stripos($text,$xarf) !== false) 
     {
         return true;
     }
 }



 return false;

}

public function UnsetUncorrectWords($words)
{
    foreach ($words as $key => $value) 
    {
        if($this->CheckToInsert($value) == false) unset($words[$key]);
        if(strlen($value) < 3) unset($words[$key]);
    }

    return $words;
}

【问题讨论】:

  • 如果您尝试音译,您可以将整个字符串转换为 utf-8
  • 不,我只是想从文本中删除所有包含这些字母的单词
  • 它有效@WiktorStribiżew 以及我如何使用这些字母“ц”、“щ”、“ы”、“ь”、“қ”、“ӣ”、“ғ”、 ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ" ?

标签: php arrays string function preg-replace


【解决方案1】:

您可以使用preg_grep 来获取包含正则表达式匹配的数组项,或不包含带有PREG_GREP_INVERT 标志的匹配项。

因此,要获取所有没有您选择的字母的项目,请使用

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ");
$wrds = array('Еыфвҷ','цӣвееп','аааа');
$pat = '/[' . implode("", $xarfho) . ']/u';
$res = preg_grep($pat, $wrds, PREG_GREP_INVERT);
// => Array (  [2] => аааа )

PHP demo

要获取带有"ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ" 字母的项目,请使用

$xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ");
$wrds = array('Еыфвҷ','цӣвееп','аааа');
$pat = '/[' . implode("", $xarfho) . ']/u';
$res = preg_grep($pat, $wrds);
// => Array ( [0] => Еыфвҷ [1] => цӣвееп )

another PHP demo

正则表达式看起来像/[цщы]/u,其中[...] 是一个字符类,它匹配模式中定义的任何字符(或字符范围),并且需要/u 修饰符,因为您的模式包含 ASCII 以外的字符,UNICODE 修饰符将使正则表达式引擎正确解析模式和输入字符串。

【讨论】:

    【解决方案2】:

    我建议像这样重写你的函数(或根本不使用函数):

    public function UnsetUncorrectWords($words)
    {
        return preg_grep('~\A[^қӣғҷҳӯҚӢҒҶҲӮ]{3,}\z~u', $words);
    }
    

    preg_grep 过滤与模式不匹配的数组项。

    该模式描述的单词至少包含 3 个字符,没有字母 қ,ӣ,ғ,ҷ,ҳ,ӯ,Қ,Ӣ,Ғ,Ҷ,Ҳ,Ӯ。

    请注意,您不能将strlen 用于多字节字符,因为它返回的是字节数,而不是字符数。

    【讨论】:

    • 我如何使用这个功能。可以用测试代码写 sumple 吗?
    猜你喜欢
    • 2019-06-24
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多