使用preg_replace

时间:2016-01-11 06:57:45

标签: php regex preg-replace

我有一个字符串,其中包含一个或多个用空格字符分隔的整数,例如:

$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'。

任何帮助将不胜感激。

1 个答案:

答案 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