Próbuję wymienić nazwę, która jest częścią listy rozdzielonej przecinkami.

Nie można jednak dowiedzieć się, jak to zrobić, aby dopasować się do dokładnej nazwy w przypadku niewrażliwych i nie złapać, jeśli nie jest dokładnym dopasowaniem

Oto, co dotarłem do tej pory.

$search  = "My name is Christina and this is another example";
$AllNames = "Lola,Chris,Monic";
$search = str_ireplace(array_map("trim", explode(",", strtolower($AllNames))), '****', $search);

W tym przypadku nazwa Christiny zostanie oznaczona jako ****, chociaż szukam tylko Chrisa. Każdy pomysł, jak mogę to osiągnąć.

Znalazłem kilka przykładów na tym, jak to zrobić, jeśli wybuchnę listę rozdzieloną przecinkami w tablicy, a następnie foreach koryta każdego elementu, ale być może istnieje łatwiejsze rozwiązanie.

1
lStoilov 6 wrzesień 2020, 15:54

1 odpowiedź

Najlepsza odpowiedź

Wypróbuj granicę słowa \b w wartościach wraz z /i Niewrażliwe modyfikatory z preg_replace:

$search  = "My name is Christina and this is another example, my friends are Lola and Monica and Monic and Chris. As lowercase: lola, christina, monic, monica, chris.";
$AllNames = ["/Lola/i", "/Chris\b/i", "/Monic\b/i"];
$search = preg_replace($AllNames, '****', $search);
echo $search;

Wynik:

My name is Christina and this is another example, my friends are **** and Monica and **** and ****. As lowercase: ****, christina, ****, monica, ****.

Należy pamiętać, że nie użyłem granicy słowa z Lola, ale można go łatwo dodać, w razie potrzeby.

3
Paul T. 6 wrzesień 2020, 13:16