我想改变这个:
$text='{i:0;s:8:"Par mail";}';
到:
$text="Par mail";
和
$ text ='{i:0; s:8:“Par mail”; i:1; s:7:“Par fax”;}};
到:
$ text =“Par mail | Par fax”;
其他人到第4个表达
为此,我使用PHP函数preg_replace
$text = preg_replace('/{i:[^\\[]?;s:[^\\[]?:"(.*?)";i:[^\\[]?;s:[^\\[]?:"(.*?)";/}','"$1 | $2"', $text);
我需要一些帮助,输入格式必须精确才能转换文本。 亲切
答案 0 :(得分:0)
使用[^"]*
代替.*?
{i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";}
<?php
$string = '{i:0;s:8:"Par mail";i:1;s:7:"Par fax";}';
$pattern = '~{i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";}~';
$replacement = "$1 | $2";
echo preg_replace($pattern, $replacement, $string);
?>
输出:
Par mail | Par fax
答案 1 :(得分:0)
我走了preg_replace_callback
路线。
<?php
$s = '{i:0;s:8:"Par mail";i:1;s:7:"Par fax";}';
$arrM = array();
preg_replace_callback("/(s\:[0-9]*\:\")([A-Z\ ]+)/i", function($arrMatches) use(&$arrM) {
$arrM[] = $arrMatches[2];
}, $s);
echo implode(" | ", $arrM); //Output: Par mail | Par fax
答案 2 :(得分:0)
我猜你的字符串前面有这些字符:a:2
然后可以反序列化:
$text='a:2:{i:0;s:8:"Par mail";i:1;s:7:"Par fax";}';
$obj = unserialize($text);
print_r($obj);
<强>输出:强>
Array
(
[0] => Par mail
[1] => Par fax
)
在此反序列化后,您可以使用|
加入值。
echo implode('|', $obj);// --> Par mail|Par fax