Quelqu'un peut-il m'expliquer comment utiliser la fonction preg_split ()? Je n'ai pas compris le paramètre de modèle comme celui-ci "/[\s,]+/"
.
par exemple:
J'ai ce sujet: is is.
et je veux que les résultats soient:
array (
0 => 'is',
1 => 'is',
)
il ignorera donc l'espace et le point final, comment puis-je faire cela?
preg
signifie Pcre REGexp ", ce qui est en quelque sorte redondant, car le" PCRE "signifie" Perl Compatible Regexp ".
Les regexps sont un cauchemar pour le débutant. Je ne les comprends toujours pas pleinement et je travaille avec eux depuis des années.
Fondamentalement, l'exemple que vous avez là-bas, ventilé est:
"/[\s,]+/"
/ = start or end of pattern string
[ ... ] = grouping of characters
+ = one or more of the preceeding character or group
\s = Any whitespace character (space, tab).
, = the literal comma character
Vous avez donc un modèle de recherche qui est "divisé sur n'importe quelle partie de la chaîne qui est au moins un espace blanc et/ou une ou plusieurs virgules".
D'autres caractères communs sont:
. = any single character
* = any number of the preceeding character or group
^ (at start of pattern) = The start of the string
$ (at end of pattern) = The end of the string
^ (inside [...]) = "NOT" the following character
Pour PHP il y a de bonnes informations dans la documentation officielle .
Cela devrait fonctionner:
$words = preg_split("/(?<=\w)\b\s*[!?.]*/", 'is is.', -1, PREG_SPLIT_NO_EMPTY);
echo '<pre>';
print_r($words);
echo '</pre>';
La sortie serait:
Array
(
[0] => is
[1] => is
)
Avant d'expliquer l'expression régulière, juste une explication sur PREG_SPLIT_NO_EMPTY
. Cela signifie essentiellement que renvoyer les résultats de preg_split
si les résultats ne sont pas vides. Cela vous assure que les données renvoyées dans le tableau $words
Contiennent vraiment des données et pas seulement des valeurs vides qui peuvent se produire lorsque vous traitez avec des modèles d'expression régulière et des sources de données mixtes.
Et l'explication de cette expression régulière peut être décomposée comme ceci en utilisant cet outil :
NODE EXPLANATION
--------------------------------------------------------------------------------
(?<= look behind to see if there is:
--------------------------------------------------------------------------------
\w Word characters (a-z, A-Z, 0-9, _)
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
\b the boundary between a Word char (\w) and
something that is not a Word char
--------------------------------------------------------------------------------
\s* whitespace (\n, \r, \t, \f, and " ") (0 or
more times (matching the most amount
possible))
--------------------------------------------------------------------------------
[!?.]* any character of: '!', '?', '.' (0 or more
times (matching the most amount possible))
Une meilleure explication peut être trouvée en entrant le modèle regex complet de /(?<=\w)\b\s*[!?.]*/
dans cet autre autre outil :
(?<=\w)
Lookbehind positif - Affirmez que l'expression régulière ci-dessous peut être mise en correspondance \w
Correspond à n'importe quel caractère Word [a-zA-Z0-9_]
\b
Affirme la position à la limite d'un mot (^\w|\w$|\W\w|\w\W)
\s*
correspond à n'importe quel caractère d'espace blanc [\r\n\t\f ]
!?.
Un seul caractère de la liste !?.
LittéralementCette dernière explication regex peut être résumée par un humain - également connu sous le nom de moi - comme suit:
Faites correspondre - et divisez - tout caractère Word précédant une limite Word pouvant avoir plusieurs espaces et les signes de ponctuation de !?.
.
La documentation dit:
La fonction preg_split () fonctionne exactement comme split (), sauf que les expressions régulières sont acceptées comme paramètres d'entrée pour le modèle.
Donc, le code suivant ...
<?php
$ip = "123 ,456 ,789 ,000";
$iparr = preg_split ("/[\s,]+/", $ip);
print "$iparr[0] <br />";
print "$iparr[1] <br />" ;
print "$iparr[2] <br />" ;
print "$iparr[3] <br />" ;
?>
Cela produira le résultat suivant.
123
456
789
000
Donc, si vous avez ce sujet: is is
et vous voulez: tableau (0 => 'est', 1 => 'est',)
vous devez modifier votre expression régulière en "/[\s]+/"
Sauf si vous avez is ,is
vous avez besoin de l'expression régulière que vous avez déjà "/[\s,]+/"
Le PHP str_Word_count
peut être un meilleur choix ici.
str_Word_count($string, 2)
affichera un tableau de tous les mots de la chaîne, y compris les doublons.