koj*_*ow7 9 php arrays string whitespace replace
我目前有两个数组设置,我试图检查一个单词中的最后两个字母,如果与第一个数组匹配,则将其替换为其他字符.我目前正在努力做到这一点到行尾,但我无法弄清楚如何为不在行尾的单词执行此操作.
以下是我的数组可能是什么样子的示例.这些是从数据库查询填充的.字符可以是任何Unicode字符,因此不一定在AZ或az的范围内.
$array1 = ['mp', 'tm', 'de', 'HK'];
$array2 = ['MAP', 'TM', "DECIMAL", '?'];
Run Code Online (Sandbox Code Playgroud)
我当前的代码如下所示:
$mystring = "samplemp";
$last = substr($mystring, -2);
$newlast = str_replace($array1, $array2, $last);
if ($last != $newlast){
$mystring = substr($mystr, 0, 2).$newlast;
}
Run Code Online (Sandbox Code Playgroud)
我的工作:
所以,我目前的代码查看了字符串中的最后两个字符.如果最后两个字符是"mp",例如它用"MAP"替换它们.所以如果我的字符串看起来像:
samplemp
Run Code Online (Sandbox Code Playgroud)
它被正确地改变为
sampleMAP
Run Code Online (Sandbox Code Playgroud)
到目前为止一切正常.
问题
我遇到的问题是处理不在字符串末尾的单词.例如:
samplemp okay de hellotm
blatm theHK end
Run Code Online (Sandbox Code Playgroud)
应该换成
sampleMAP okay DECIMAL helloTM
blaTM the? end
Run Code Online (Sandbox Code Playgroud)
我希望能够考虑所有空白区域,包括空格,制表符和回车.但是,空格必须保持完整且不会更改.空格必须保留为空格,制表符作为制表符,并且回车时返回回车符.
到目前为止,我已经能够弄清楚我可能需要使用\s转义字符来使用正则表达式来计算空格.但是,我无法理解如何在作用于数组的str_replace函数中使用它.有没有办法做到这一点?如果没有,我还应该做些什么才能让它发挥作用?
我会做:
\n\n$string = <<<EOD\nsamplemp okay de hellotm\nblatm theHK end\nEOD;\n$array1 = [\'mp\', \'tm\', \'de\', \'HK\'];\n$array2 = [\'MAP\', \'TM\', "DECIMAL", \'\xe5\xad\x97\'];\n\n$hash = array_combine($array1, $array2);\nforeach($hash as $k => $v) {\n $string = preg_replace_callback(\'/\'.preg_quote($k).\'(?=\\s|$)/u\', function($m) use($v) {\n return $v;\n },\n $string\n );\n}\necho $string,"\\n";\nRun Code Online (Sandbox Code Playgroud)\n\n其中(?=\\s|$)有一个向前看,它确保我们在搜索的键之后有任何类型的空格(即空格、制表、回车、换行符……)或字符串结尾。这样,我们就保持空白不变。
/u是 unicode 标志。
输出:
\n\nsampleMAP okay DECIMAL helloTM\nblaTM the\xe5\xad\x97 end\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
254 次 |
| 最近记录: |