我正在研究一个脚本,该脚本将从短信中识别令人反感的单词.问题在于,有时用户会对单词进行一些更改,使它们无法识别.我的代码必须能够尽可能地识别出这些.
首先,我将所有非数字字符替换为空格.
接着:
我已经写了两个正则表达式模式.
一种从字符串中删除重复字符的方法.
例如:用户写过:seeeeex,将其替换为sex:
preg_replace('/(.)\1+/', '$1', $text)
这种正则表达式适用于英语单词,但不适用于波斯语单词,这就是我的情况.
例如,如果您编写:
امیییییییییین
它没有任何作用.
我也试过
mb_ereg_replace
但这也不起作用.
我的另一个正则表达式是删除所有一个字母的单词之间的空格.
例如:我希望它将S X转换为性别:
preg_replace('/( [a-zA-Zآ-ی] )\1+/', trim('$1'), $text);
此正则表达式根本不起作用,需要更正.
谢谢您的帮助
解决方法:
使用多字节字符时,应启用Unicode Aware修饰符来更改令牌的行为,以匹配正确的事物.在您的第一种情况下,应为:
/(.)\1+/u
但是,在第二个正则表达式中,我同时看到了语法和语义错误,您可以将其更改为:
/\b(\pL)\s+/u
PHP:
preg_replace('/\b(\pL)\s+/u', '$1', $text);
放在一起:
$text = 'سسس ککک سسس';
echo preg_replace(['/(.)\1+/u', '/\b(\pL)\s+/u'], '$1', $text); // خروجی میدهد: سکس
标签:unicode,php,regex
来源: https://codeday.me/bug/20191110/2013938.html