[英]using regex for filtering some words in persian in php
我正在制作一个脚本,用于识别短信中令人反感的词汇。 问题在于,有时用户会对单词进行一些更改并使其无法识别。 我的代码必须能够尽可能地识别它们。
首先,我将所有非alnum字符替换为空格。
然后:我写了两个正则表达式模式。 一个从字符串中删除重复字符。 例如:用户写了:seeeeex,它用性取代它:
preg_replace('/(.)\1+/', '$1', $text)
这个正则表达式适用于英语单词,但不适用于我的情况下的波斯语单词。 例如,如果你写:امیییییییییین它没有做任何事情。 我也试过了
mb_ereg_replace
但它也没有用。
我的另一个正则表达式是删除所有单字母单词周围的空格。 例如:我希望它将性别转换为性别:
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); // خروجی میدهد: سکس
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.