我有一个字符串,其中包含一个或多个用空格字符分隔的整数,例如:
$string = '2 7 6 9 11';
我想用存储在数组中的相应单词替换每个数字,例如:
static $companyTypes = array('word1', 'word2', 'word3', 'word4', 'word5', 'word6', 'word7', 'word8', 'word9', 'word10', 'word11', 'word12');
所以我使用了我在此页面中找到的示例:http://php.net/manual/en/function.preg-replace.php
我定义了一个这样的模式数组:
$pattern = array('/1/','/2/','/3/','/4/','/5/','/6/','/7/','/8/','/9/','/10/','/11/','/12/');
最后使用了preg_replace函数:
$order->company_type= preg_replace($pattern, $companyTypes, $order->company_type);
但不幸的是,这个解决方案不会区分一位数字和两位数字,所以如果输入字符串是' 1 11'输出将是< word1 word1word1'而不是&word; word1 word11'。
任何帮助将不胜感激。
答案 0 :(得分:1)
完全正则表达式的解决方案:
jre
$pattern = array('/(^1 | 1 | 1$)/', '/(^2 | 2 | 2$)/', '/(^3 | 3 | 3$)/', '/(^4 | 4 | 4$)/', '/(^5 | 5 | 5$)/' , '/(^6 | 6 | 6$)/', '/(^7 | 7 | 7$)/', '/(^8 | 8 | 8$)/', '/(^9 | 9 | 9$)/', '/(^10 | 10 | 10$)/', '/(^11 | 11 | 11$)/', '/(^12 | 12 | 12$)/', '/(^13 | 13 | 13$)/', '/(^14 | 14 | 14$)/');
echo preg_replace($pattern, $companyTypes, $string);
意味着如果一个字符串以5后跟一个空格,或者我们匹配一个带有'的字符串。 5',或者如果我们匹配一个位于字符串末尾的字符串,并且前面有一个空格,那么它将匹配。它将匹配/(^5 | 5 | 5$)/
(在字符串的开头),'5 '
(在中间的任何位置)或' 5 '
(在字符串的末尾)。
如果某个公司类型与正则表达式中的某些内容匹配,则可能会遇到您最初描述的问题。所以如果你真的需要的话,我已经提供了另一种解决方案。
将字符串分开的另一种解决方案:
正则表达式可以更新为仅替换完全匹配。
' 5'
因此,在$pattern = array('/^1$/','/^2$/','/^3$/','/^4$/','/^5$/','/^6$/','/^7$/','/^8$/','/^9$/','/^10$/','/^11$/','/^12$/','/^13$/','/^14$/');
的示例中,/^10$/
表示字符串的开头,^
表示字符串的结尾。总而言之,这意味着它意味着是否存在10的精确匹配。
并且,你应该真正分开你的开始,以防止任何不希望的字符串更改。因此,使用$
将字符串拆分,然后遍历每个字符串部分并替换所需的部分,然后将字符串与explode
一起重新组合。
implode