Php 如果单词中有此字母,我如何删除单词

Php 如果单词中有此字母,我如何删除单词,php,arrays,string,function,preg-replace,Php,Arrays,String,Function,Preg Replace,如果word中有字母“ц”、“ц”、“ц”、“ц”,我必须删除这些单词。我为需要我的人创建了这个函数,但它运行缓慢 public function CheckToInsert($text) { $xarfho = array("ц", "щ", "ы", "ь","қ","ӣ","ғ","ҷ","ҳ","ӯ","Қ","Ӣ","Ғ","Ҷ","Ҳ","Ӯ"); foreach ($xarfho as $xarf) { if (stripos($text,$xarf) !==

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

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;
}
公共函数CheckToInsert($text)
{
$xarfho=数组(“ч”、“ч”、“қ”、“ӣ”、“ғ”、“ҷ”、“ҳ”、“Қ”、“Ӣ”、“Ғ”、“Ҳ”、“Ӯ”);
foreach($xarfho作为$xarf)
{
if(stripos($text,$xarf)!==false)
{
返回true;
}
}
返回false;
}
公共功能未更正单词($words)
{
foreach($key=>$value的单词)
{
如果($this->CheckToInsert($value)==false)未设置($words[$key]);
如果(strlen($value)<3)未设置($words[$key]);
}
返回$words;
}

我建议重写您的函数(或根本不使用函数),如下所示:

public function UnsetUncorrectWords($words)
{
    return preg_grep('~\A[^қӣғҷҳӯҚӢҒҶҲӮ]{3,}\z~u', $words);
}
preg_grep
筛选与模式不匹配的数组项

该模式描述的单词至少有3个字符,没有字母қ、ӣ、ғ、ҷ、ӯ、Қ、Ӣ、Ҷ、Ӯ


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

我建议您重写函数(或根本不使用函数),如下所示:

public function UnsetUncorrectWords($words)
{
    return preg_grep('~\A[^қӣғҷҳӯҚӢҒҶҲӮ]{3,}\z~u', $words);
}
preg_grep
筛选与模式不匹配的数组项

该模式描述的单词至少有3个字符,没有字母қ、ӣ、ғ、ҷ、ӯ、Қ、Ӣ、Ҷ、Ӯ

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

您可以使用它获取包含正则表达式匹配项的数组项,也可以获取不包含带有
PREG\u INVERT
标志的匹配项的数组项

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

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

要获取带有字母“ч”、“ч”、“қ”、“ӣ”、“ғ”、“ҷ”、“ӯ”、“Қ”、“Ӣ”、“Ғ”、“Ҷ”、“Ҳ”、“Ӯ”的项目,请使用

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

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

您可以使用该修饰符获取包含正则表达式匹配项的数组项,或者那些不包含与
PREG\u GREP\u INVERT
标志匹配的

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

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

要获取带有字母“ч”、“ч”、“қ”、“ӣ”、“ғ”、“ҷ”、“ӯ”、“Қ”、“Ӣ”、“Ғ”、“Ҷ”、“Ҳ”、“Ӯ”的项目,请使用

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


regexp看起来像
/[ццц1099;]/u
,其中
[…]
是匹配任何字符(或字符范围)的字符类在模式中定义,
/u
修饰符是必需的,因为您的模式包含ASCII以外的字符,UNICODE修饰符将使正则表达式引擎正确解析模式和输入字符串。

如果您尝试进行音译,可以将整个字符串转换为utf-8No,我只想从文本中删除所有包含这些字母的单词,比如?或者它在@WiktorStribiżew中起作用,以及如何获得这些字母的单词“m”、“m”、“ӣ”、“ғ”、“ҷ”、“ӯ”、“Қ”、“Ӣ”、“Ҷ”、“Ҳ”、“Ӯ”?如果您尝试音译,可以将整个字符串转换为utf-8No,我只想从文本中删除包含这些字母的所有单词,比如?或者它在@WiktorStribiżew中起作用,以及我如何获得带有这些字母的单词“m”、“ы”、“ӣ”、“ғ”、“ҷ”、“ӯ”、“Қ”、“Ӣ”、“Ҷ”、“Ҳ”、“Ӯ”?我如何使用这个函数。你能用测试代码写sumple吗?我如何使用这个函数。您可以使用测试代码编写sumple吗?