PHP регулярное выражение и preg_replace выпуск 3

я хочу преобразовать это:

$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);

Мне нужна помощь, формат ввода должен быть точным для преобразования текста.
радушно

-1

Решение

Я спустился 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

https://eval.in/194049

0

Другие решения

использование [^"]* вместо .*?

{i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";i:[^\\[]*?;s:[^\\[]*?:"([^"]*)";}

DEMO

<?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
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
0