我从字符串中删除无意义的单词时遇到了这个问题,例如:
$ string =“嗨,我的名字是Tom.jc2pMK NB,xVD NOZmF__u cYNdtR46eEb8y,74今天我注册了堆栈溢出.krEBNB1cB8 cq7,zCL x5KOwwRZfU13.bI g_IXxlcztXYN,DPnmcgj2FyydHAx @我喜欢IT。0T1LAkuoPXscYC5uK6mlG R1nix_5kwF,EKxXvT1 SjZYC4A6YQ 4E “;
现在我希望能够在PHP中搜索并销毁那些毫无意义的单词。我正在尝试preg_replace($pattern, "", $string)
,但无法弄清楚让“嗨”留在那里但删除“jc2pMK”的模式。我敢打赌这是一个带字符串的基本过程,每个基本程序员都应该很容易理解,但我没有正则表达式的经验。
我对任何其他想法持开放态度,如何摆脱毫无意义的话语。
答案 0 :(得分:2)
如果你想在语义层面上解决这个问题,你需要一种某种字典。一个穷人的方法就是做一些像
这样的事情$dict = file('wordsEn.txt', FILE_IGNORE_NEW_LINES);
$string = "Hi, my name is Tom. jc2pMK NB,xVD NOZmF__u cYNdtR46eEb8y,74 Today i registered to stack overflow. krEBNB1cB8 cq7,zCL x5KOwwRZfU13.bI g_IXxlcztXYN , DPnmcgj2FyydHAx@ I like IT. 0T1LAkuoPXscYC5uK6mlG R1nix_5kwF ,EKxXvT1 SjZYC4A6YQ 4E";
$words = explode(' ', $string); // can also use str_word_count
echo implode (' ', array_intersect($words, $dict) );
这会将字典加载到数组中,将字符串拆分为数组,然后创建一个diff来为字符串中存在的字符串中的单词提供。在示例中,我使用http://www-01.sil.org/linguistics/wordlists/english/wordlist/wordsEn.txt作为字典,这将导致:
我的名字已注册为堆叠,如
结果显然只会与你的字典一样好。此外,该解决方案不考虑套管。但它应该让你知道如何处理这个问题。
您可以在PHP's Human Language and Character Encoding Support中找到更复杂的解决方案,例如使用Enchant和PSpell扩展程序,这些扩展程序允许您对字典文件进行拼写检查。
答案 1 :(得分:1)
正如其他人所评论的那样,你没有定义什么是“毫无意义的词”,所以你不可能回答你的问题。但是,对于您的示例$string
,正常表达式 ONLY ,不保证其他字符串,如下所示:
匹配(前方有空格):
(?:\w+[0-9_,@](?:\.\w)?\w*|[0-9.,]\w*)
替换:
[leave empty]
您可以在regex101在线测试。
这是等效的PHP代码片段:
$output = "Hi, my name is Tom. jc2pMK NB,xVD NOZmF__u cYNdtR46eEb8y,74 Today i registered to stack overflow. krEBNB1cB8 cq7,zCL x5KOwwRZfU13.bI g_IXxlcztXYN , DPnmcgj2FyydHAx@ I like IT. 0T1LAkuoPXscYC5uK6mlG R1nix_5kwF ,EKxXvT1 SjZYC4A6YQ 4E";
$result = preg_replace('/ (?:\w+[0-9_,@](?:\.\w)?\w*|[0-9.,]\w*)/',"",$output);
echo $result; #prints Hi, my name is Tom. Today i registered to stack overflow. I like IT.
同样,这只是您特定字符串的快速而肮脏的解决方案。