Bonjour,
Je suis en train d'écrire un script PHP pour isoler dans une chaîne de caractères les mots-clés selon 3 critères :
- mots encadrés par guillemets doubles
- mots encadrés par guillemets simples
- mots non encadrés
Ainsi, je souhaiterais que les mots-clés saisis dans le champ texte soit traités comme dans l'exemple ci-dessous :
Champ texte de saisie des mots-clés :
Résultat attendu :"Green arrow" Spider-man Groot "Wonder woman"
Or, actuellement, un résultat n'est obtenu que par regex sur tous les mots sans tenir compte des guillemets. Il est le suivant :Green arrow
Spider-man
Groot
Wonder woman
Si je retire la partie de regex concernant tous les mots "unquoted" alors je n'obtiens qu'un résultat vide. Ce qui veut dire que mes regex sur simples et doubles quotes ne fonctionne pas du tout :Array
(
[0] => Array
(
[0] => "Green
[1] => arrow"
[2] => Spider-man
[3] => Groot
[4] => "Wonder
[5] => woman"
)
[1] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
)
[2] => Array
(
[0] =>
[1] =>
[2] =>
[3] =>
[4] =>
[5] =>
)
)
Array
(
[0] => Array
(
)
[1] => Array
(
)
[2] => Array
(
)
)
Voici maintenant le code PHP que j'ai utilisé :
Comment corriger mes formules regex pour obtenir le résultat recherché ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 $tempArray = ""; // Putting to the array : // - double-quoted substrings // - single-quoted substrings // - unquoted substrings $regex_dbquotes = '"(.+)"'; $regex_quotes = '\'(.+)\''; $regex_unquoted = '[^ ].\S*'; // Any non-whitespace character $regex = '/'.$regex_dbquotes.'|'.$regex_quotes.'|'.$regex_unquoted.'/'; preg_match_all($regex, $this->searchString, $tempArray, PREG_PATTERN_ORDER);
Partager