繁体   English   中英

使用正则表达式过滤PHP中的波斯语中的一些单词

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM