Pattern Demo/Explanation
code: (Demo)
$phone='Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2';
$match='/Galaxy S(\d+)/';
$replace='(<span class="galaxy">galaxy</span> $1)';
echo preg_replace($match,$replace,$phone);
Sortie non calculé:
Samsung (<span class="galaxy">galaxy</span> 8)~LG G6~iPhone 7 Plus~ Motorola Z2
Voici le bloc complet <ul>
:
$phone='Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2';
$match='/Galaxy S(\d+)/';
$replace='(<span class="galaxy">galaxy</span> $1)';
echo '<ul><li>',str_replace('~',',</li><li>',preg_replace($match,$replace,$phone)),'</li></ul>';
sortie non calculé:
<ul><li>Samsung (<span class="galaxy">galaxy</span> 8),</li><li>LG G6,</li><li>iPhone 7 Plus,</li><li> Motorola Z2</li></ul>
Altération final:
$phones="Samsung Galaxy S8~LG G6~iPhone 7 Plus~ Motorola Z2";
$patterns=[
'/(?:Galaxy S)?\d[^~]*/', // match (optional Galaxy S), number, optional trailing text
'/~ ?/', // match delimiter and optional trailing space (at Motorola)
'/Galaxy S/' // literally match Galaxy S
];
$replacements=[
'($0)', // wrap full string match in parentheses
'</li><li>', // use closing and opening li tags as new delimiter
'<span class="galaxy">Galaxy</span> ' // tagged text (note: G & space after </span>)
];
$full_list='<ul><li>'.preg_replace($patterns,$replacements,$phones).'</li></ul>';
echo $full_list;
Sortie non calculé:
<ul><li>Samsung (<span class="galaxy">galaxy</span> 8)</li><li>LG G(6)</li><li>iPhone (7 Plus)</li><li>Motorola Z(2)</li></ul>