我目前有兩個數組設置,並且我試圖檢查單詞中的最後兩個字母,並用其他字符替換它,如果與第一個數組匹配。我現在正在努力做到這一點,但我不知道如何做到這一點,對於不在行尾的單詞。檢查並替換行尾或空格前的字符
以下是我的數組可能看起來像的一個示例。這些從數據庫查詢填充。這些字符可以是任何Unicode字符,因此不一定在A-Z或a-z範圍內。
$array1 = ['mp', 'tm', 'de', 'HK'];
$array2 = ['MAP', 'TM', "DECIMAL", '字'];
我當前的代碼如下所示:
$mystring = "samplemp";
$last = substr($mystring, -2);
$newlast = str_replace($array1, $array2, $last);
if ($last != $newlast){
$mystring = substr($mystr, 0, 2).$newlast;
}
我所工作:
所以,我現在有代碼看起來在字符串中的最後兩個字符。例如,如果最後兩個字符是「mp」,則用「MAP」替換它們。所以,如果我的字符串看起來像:
samplemp
它被正確地改爲
sampleMAP
至此一切正常。
問題
我有正在處理不在一個字符串末尾的字的問題。例如:
samplemp okay de hellotm
blatm theHK end
應
sampleMAP okay DECIMAL helloTM
blaTM the字 end
我希望能夠考慮到所有空白,包括空格,製表符和回車替換。但是,空格必須保持完整並且不能更改。空格必須保留爲空格,製表符作爲製表符,並且回車符作爲回車。
到目前爲止,我已經能夠弄清楚,我可能需要使用正則表達式使用\s
轉義字符來解釋空白。但是,我無法理解如何將str_replace函數用於數組。有沒有辦法做到這一點?如果沒有,我還應該做些什麼才能使其發揮作用?
你缺少一個'$'這裏'$ myString的= SUBSTR($ mystr,0,2).newlast;'應該是'$ mystring = substr($ mystr,0,2)。$ newlast;' – ArtisticPhoenix
感謝您的幫助@ArtisticPhoenix,我沒有想到提到的一件事是字符不一定是拉丁字符,而是任何Unicode字符。所以,a-z範圍將不起作用。我認爲你可能會對preg_replace函數有所瞭解,但我將不得不更多地關注它,試圖搜索空白區域。另外,謝謝你指出我缺少的$。我的真實代碼中有$,只是在我的示例中錯過了它。 – kojow7
您遇到的問題是str_replace,將取代任何出現的字符串。 preg_replace或Regx通常會讓您更好地控制匹配發生的位置。 – ArtisticPhoenix