簡體   English   中英

匹配和替換單詞時使用大寫和小寫的模式

[英]Pattern to match and replace words with upper and also lower case in them

我在從字符串中消除無意義的單詞時遇到了這個問題,例如:

$字符串= “你好,我的名字是湯姆jc2pMK NB,XVD NOZmF__u cYNdtR46eEb8y,74今天,我注冊的堆棧溢出krEBNB1cB8 cq7,ZCL x5KOwwRZfU13.bI g_IXxlcztXYN,DPnmcgj2FyydHAx @我喜歡0T1LAkuoPXscYC5uK6mlG R1nix_5kwF,EKxXvT1 SjZYC4A6YQ 4E。”

現在,我希望能夠使用PHP從那里搜索並銷毀那些毫無意義的單詞。 我正在嘗試preg_replace($pattern, "", $string)但找不到讓“ Hi”呆在那里但刪除“ jc2pMK”的模式。 我敢打賭,這是一個帶有字符串的基本過程,每個基本程序員都應該容易理解,但是我對正則表達式沒有經驗。

我對其他想法持開放態度,如何擺脫無意義的詞。

如果要在語義級別解決此問題,則需要某種字典。 窮人的方法是做類似的事情

$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的“人類語言和字符編碼支持”中找到更復雜的解決方案,例如帶有EnchantPSpell擴展名的擴展名,這些擴展名使您可以根據字典文件拼寫檢查詞。

正如其他所有人所評論的那樣,您並沒有定義“無意義的單詞”是什么,因此無法回答您的問題。 但是, 僅對您的示例$string有效的正則表達式如下:

匹配(前面有一個空格):

 (?:\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.

同樣,這只是針對您的特定字符串的快速而骯臟的解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM