我的问题是我从头开始创建一个小型搜索引擎,但如果我用俄语/除英语之外的其他语言搜索,它会变得混乱。我希望有人能给我一个带正则表达式的代码,可以过滤掉(不仅仅是检测,自动过滤)俄文字母,或除英文字母和键盘特殊字符( -/:;()外的其他任何字母$ & @” - 。等) 后来,我将提前实现不同语言的支持,我的引擎,但现在,我要完成发动机的基础只允许英文字母/数字/数字和一些特殊字符
感谢
我的问题是我从头开始创建一个小型搜索引擎,但如果我用俄语/除英语之外的其他语言搜索,它会变得混乱。我希望有人能给我一个带正则表达式的代码,可以过滤掉(不仅仅是检测,自动过滤)俄文字母,或除英文字母和键盘特殊字符( -/:;()外的其他任何字母$ & @” - 。等) 后来,我将提前实现不同语言的支持,我的引擎,但现在,我要完成发动机的基础只允许英文字母/数字/数字和一些特殊字符
感谢
您可以创建。一系列允许的字符,然后过滤那些不允许的字符:
$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 !
这看起来很有趣。非常感谢,我会尝试一下! – VladHQ 2013-05-02 12:28:00
为什么复杂?正则表达式将读取字符串的内容,所以最好自己做。读取字符串的字符并检查其对应的ASCII值。
使用SplStorageObject创建一个类似于结构的哈希集,如果字符落在所需的集合中,则手动检查。你可以添加任何你想要读取的字符到这个集合。
编辑 - 您可能也想使用正则表达式 - 类似[a-zA-Z0-9,。/ + & - ],但使用set可以让您逐渐扩展您的搜索引擎,已知字符集。
这可能不是最有效的方式,但它的工作原理:)
$str='"it is a simple test \ + - é Ó ½ 213 /:;()$&@".~" ';
$result= preg_replace('/[^\s\w\+\-\\":;@\(\)\$\&\.\/]*/', '', $str);
echo $result;
,但你需要在每个特殊字符添加。
但正则表达式是专为像你的情况,为什么你不想使用它? – Darvex 2013-05-02 07:26:09
如果没有替代正则表达式,我想它会没事的。我只是无法学习正则表达式,这对我来说似乎太复杂了。 – VladHQ 2013-05-02 07:27:30
@TillHelge答案有一个正则表达式的解决方案。 – HamZa 2013-05-02 07:32:07