Preg_match没有找到重音符号

时间:2014-03-16 06:53:48

标签: php regex preg-match

我正在尝试用重音符号或西班牙语字符搜索单词,但它不起作用

if(preg_match('|\b(' . $iText . ')\b|i', $str_content)) {...}

例如,如果我插入

$iText="desempeño";

$iText="Función necesaria" 

并且它不起作用,当然,我发布带有表单输入的$ iText。

-------------- EDIT --------

我用一个数组代替普通字符解决了ASCII字符:

function prepare($pattern)
{
$replacements =array('À'=>'À', 'à'=>'à', 'Á'=>'Á', 'á'=>'á', 'Â'=>'Â', 'â'=>'â', 'Ã'=>'Ã', 'ã'=>'ã', 'Ä'=>'Ä', 'ä'=>'ä', 'Å'=>'Å', 'å'=>'å', 'Æ'=>'Æ', 'æ'=>'æ', 'Ç'=>'Ç', 'ç'=>'ç', 'Ð'=>'Ð', 'ð'=>'ð', 'È'=>'È', 'è'=>'è', 'É'=>'É', 'é'=>'é', 'Ê'=>'Ê', 'ê'=>'ê', 'Ë'=>'Ë', 'ë'=>'ë', 'Ì'=>'Ì', 'ì'=>'ì', 'Í'=>'Í', 'í'=>'í', 'Î'=>'Î', 'î'=>'î', 'Ï'=>'Ï', 'ï'=>'ï', 'Ñ'=>'Ñ', 'ñ'=>'ñ', 'Ò'=>'Ò', 'ò'=>'ò', 'Ó'=>'Ó', 'ó'=>'ó', 'Ô'=>'Ô', 'ô'=>'ô', 'Õ'=>'Õ', 'õ'=>'õ', 'Ö'=>'Ö', 'ö'=>'ö', 'Ø'=>'Ø', 'ø'=>'ø', 'Œ'=>'Œ', 'œ'=>'œ', 'ß'=>'ß', 'Þ'=>'Þ', 'þ'=>'þ', 'Ù'=>'Ù', 'ù'=>'ù', 'Ú'=>'Ú', 'ú'=>'ú', 'Û'=>'Û', 'û'=>'û', 'Ü'=>'Ü', 'ü'=>'ü', 'Ý'=>'Ý', 'ý'=>'ý', 'Ÿ'=>'Ÿ', 'ÿ'=>'ÿ');
 return str_replace(array_keys($replacements), $replacements, $pattern);  
}

然后我把这个函数放在if:

 if(preg_match('|\b(' . prepare($iText) . ')\b|i', prepare($str_content)))

1 个答案:

答案 0 :(得分:1)

您需要将u (PCRE_UTF8)修饰符添加到正则表达式

  

u(PCRE_UTF8)此修饰符打开PCRE的其他功能   这与Perl不兼容。模式字符串被视为UTF-8。   这个修饰符可以在Unix上从PHP 4.1.0或更高版本获得   win32上的PHP 4.2.3。自PHP以来检查模式的UTF-8有效性   4.3.5。

Source

只需像这样添加..

if(preg_match('|\b(' . $iText . ')\b|ui', $str_content)) {...}
                                     ^--- Here