我目前有两个数组设置,并且我试图检查单词中的最后两个字母,并用其他字符替换它,如果与第一个数组匹配。我现在正在努力做到这一点,但我不知道如何做到这一点,对于不在行尾的单词。检查并替换行尾或空格前的字符
以下是我的数组可能看起来像的一个示例。这些从数据库查询填充。这些字符可以是任何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