我的问题是我正在从头开始制作一个小型搜索引擎,但是如果我用俄语/除英语以外的任何其他语言进行搜索,它就会变得一团糟。我希望有人能给我一个带有正则表达式的代码,它可以过滤掉(不仅仅是检测,自动过滤掉)俄语字母,或者除英文字母之外的任何其他字母,以及键盘特殊字符(-/:;()$& @". - etc)。稍后,我将为我的引擎实现不同的语言支持,但现在,我想完成引擎的基础。
提前致谢。
您可以创建一个允许的字符数组,然后过滤那些不允许的字符:
$allowed = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9), array(' ', '+', '/', '-', '*', '.')); // Create an array of allowed characters
$string = 'This is allowed and this not é Ó ½ and nothing 123.'; // test string
$array = str_split($string); // split the string (character length = 1)
echo implode('', array_intersect($array, $allowed)); // Filter and implode !
在线演示。
为什么复杂?正则表达式将读取字符串的内容,所以最好自己做。读取字符串的字符并检查它们对应的 ASCII 值。
使用SplStorageObject创建一个类似哈希集的结构,并手动检查字符是否属于所需的集合。您可以将要阅读的任何字符添加到此集合中。
编辑 - 您可能也想使用正则表达式 - 类似于 [a-zA-Z0-9,./+&-] 但使用集合可以让您通过向已知字符集中添加更多字符来逐渐扩展搜索引擎.
这可能不是最有效的方法,但它有效:)
$str='"it is a simple test \ + - é Ó ½ 213 /:;()$&@".~" ';
$result= preg_replace('/[^\s\w\+\-\\":;@\(\)\$\&\.\/]*/', '', $str);
echo $result;
但是您需要添加每个特殊字符。