我正在编写一个脚本,用于识别短信中的冒犯性词语。问题在于,有时用户会对单词进行一些更改并使其无法识别。我的代码必须能够尽可能地识别它们。
首先,我将所有非alnum字符替换为空格。
然后: 我写了两个正则表达式模式。 一个从字符串中删除重复字符。 例如:用户写了:seeeeex,它用性取代它:
preg_replace('/(.)\1+/', '$1', $text)
这个正则表达式适用于英语单词,但不适用于我的情况下的波斯语单词。 例如,如果你写: امیییییییییین 它没有任何作用。 我也试过
mb_ereg_replace
但它也没有用。
我的另一个正则表达式是删除所有单字母单词周围的空格。 例如:我希望它将S E X转换为性别:
preg_replace('/( [a-zA-Zآ-ی] )\1+/', trim('$1'), $text);
这个正则表达式根本不起作用,需要纠正。
感谢您的帮助
答案 0 :(得分:3)
使用多字节字符时,应启用Unicode Aware修饰符来更改标记的行为以匹配正确的内容。在你的第一种情况下应该是:
/\b(\pL)\s+/u
然而,在你的第二个正则表达式中,我看到了语法和语义错误,你可以将它改为:
preg_replace('/\b(\pL)\s+/u', '$1', $text);
PHP:
$text = 'سسس ککک سسس';
echo preg_replace(['/(.)\1+/u', '/\b(\pL)\s+/u'], '$1', $text); // خروجی میدهد: سکس
全部放在一起:
{{Form::hidden('_method', 'POST')}}
<强> Live demo 强>