evidenziare gli ultimi 3 numeri nella stringa

2020-02-15 php

come evidenziare gli ultimi 3 numeri nella stringa: ab9c5lek94ke72koe8nsk9

voglio l'output:

ab9c5lek94ke7 2 koe 8 nsk 9

ho provato a seguire:

$str = "ab9c5lek94ke72koe8nsk9";
$numbers = preg_replace('/[^0-9]/', '', $str );
$last3 = substr($numbers, -3);
$highlights = str_split($last3);
$output = preg_replace('/'.implode('|', $highlights).'/i', '<b>$0</b>', $str);

ma evidenzia:

ab 9 c5lek 9 4ke7 2 koe 8 nsk 9

Answers

Puoi farlo facilmente usando l'espressione regolare con la funzione preg_replace() di PHP. Trova le ultime 3 cifre 3 volte alla fine della stringa. Vedi il seguente codice:

$str1 = 'ab9c5lek94ke2koe8nsk9';
$str2 = 'dag2vue41a89au76zhz30';

echo preg_replace('/(\d)([^\d]*)(\d)([^\d]*)(\d)([^\d]*)$/mui', '<b>$1</b>$2<b>$3</b>$4<b>$5</b>$6', $str1);
echo preg_replace('/(\d)([^\d]*)(\d)([^\d]*)(\d)([^\d]*)$/mui', '<b>$1</b>$2<b>$3</b>$4<b>$5</b>$6', $str2);

Uscite

ab9c5lek94ke 2 koe 8 nsk 9

e

dag2vue41a89au7 6 zhz 30

Puoi avere una regex come di seguito:

/(\d)([^\d]*)(\d)([^\d]*)(\d)([^\d]*)$/

che è sostanzialmente (\d)([^\d]*) 3 volte con un segno $ alla fine. Significa che stiamo abbinando una cifra seguita da 0 o più caratteri non numerici. Nota che alla fine abbiamo bisogno del simbolo $ per far corrispondere solo le ultime 3 cifre .

Frammento:

<?php

$str = "ab9c5lek94ke2koe8nsk9";

echo preg_replace('/(\d)([^\d]*)(\d)([^\d]*)(\d)([^\d]*)$/',"<b>$1</b>$2<b>$3</b>$4<b>$5</b>$6",$str);

Demo: https://3v4l.org/PoYCG

La stringa di sostituzione ha solo i tag in grassetto con il numero di gruppo delle stringhe corrispondenti che devono essere evidenziate.

Puoi dividere la stringa al terzo dall'ultimo numero, quindi evidenziare tutto in quella sottostringa e ricombinare le sottostringhe.

Nel mio esempio, ottengo tutti i numeri nella stringa e li metto nella matrice. Quindi uso quell'array per ottenere il delimitatore (72 nel tuo esempio), quindi uso quello per dividere la stringa in due array, a quel punto puoi evidenziare tutto nell'array [1] e poi ricomporlo nell'array [0]

$str = "ab9c5lek94ke72koe8nsk9";
// get all of the numbers in order and place into it's own array
$numbers = trim(preg_replace('/[^0-9]/', ' ', $str ));
$numbers = preg_split('/\s+/', $numbers);

// using that get the delimiter to where to split the string. and split.
$delim = $numbers[count($numbers)-3];
$arr = explode($delim, $str);
$arr[1] = $delim . $arr[1];

// then highlight everything in $arr[1]
// then combine $arr[0] and $arr[1]

Related