ne conserver de $ligne que ce qui se trouve entre les parenthèses et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ?
Si la réponse est non, tu peux faire tout simplement : preg_match_all("'[^']*'", $ligne, $matches [ , flags ]);
Si la réponse est oui, alors tu peux faire un premier preg_match qui te donne le contenu des parenthèses, suivi par celui que je donne ci-dessus.
Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire : preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
Cordialement, -- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
je voudrai remplacer mon code str_replace (qui fonctionne) :
$ligne > "des mots qui_varient('truc','bidule','machin_01','chose','');";
$extrait > str_replace(array("des mots qui_varient","(",")","'",";"),"",$ligne);
ne conserver de $ligne que ce qui se trouve entre les parenthèses
et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ?
Si la réponse est non, tu peux faire tout simplement :
preg_match_all("'[^']*'", $ligne, $matches [ , flags ]);
Si la réponse est oui, alors tu peux faire un premier preg_match qui te
donne le contenu des parenthèses, suivi par celui que je donne ci-dessus.
Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire :
preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
Cordialement,
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
ne conserver de $ligne que ce qui se trouve entre les parenthèses et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ?
Si la réponse est non, tu peux faire tout simplement : preg_match_all("'[^']*'", $ligne, $matches [ , flags ]);
Si la réponse est oui, alors tu peux faire un premier preg_match qui te donne le contenu des parenthèses, suivi par celui que je donne ci-dessus.
Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire : preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
Cordialement, -- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
newdb
Olivier Miakinen <om+ wrote:
je voudrai remplacer mon code str_replace (qui fonctionne) : par une regexp (plus générique) qui serait donc : ne conserver de $ligne que ce qui se trouve entre les parenthèses et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ? Si la réponse est non, tu peux faire tout simplement : preg_match_all("'[^']*'", $ligne, $matches [ , flags ]); Si la réponse est oui, alors tu peux faire un premier preg_match qui te donne le contenu des parenthèses, suivi par celui que je donne ci-dessus. Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire : preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
bonjour, et merci.
alors : en modifiant un poil (ajout des / et / comme délimiteurs dans le filtre de recherche), sous peine de : Warning: preg_match_all(): Unknown modifier ']' in essai1.php on line 3
donc avec : preg_match_all( "/'[ t]*([^']*)[ t]*'/", $ligne, $parties, PREG_PATTERN_ORDER );
j'obtiens bien ce que je recherchais soit : $parties[1][0] à $parties[1][4]
mais au-dela de la magie du truc (!), j'aimerai comprendre :
[^']* ^^^^^ | QUE ce qui commence et finit par une apostrophe
( [^']* ) ^ ^ |_________| ET se trouve entre parenthèses mais SANS les parenthèses
[ t]* ([^']*) [ t]* ^^^^^^ ^^^^^^ |_______________| ET sans espace ni avant ni après
' [ t]*([^']*)[ t]* ' ^ ^ |_______________________| ET sans apostrophe ni avant ni après
"/ '[ t]*([^']*)[ t]*' /" ^^ ^^ |___________________________| les délimiteurs
j'ai bon ?
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Olivier Miakinen <om+news@miakinen.net> wrote:
je voudrai remplacer mon code str_replace (qui fonctionne) :
par une regexp (plus générique) qui serait donc :
ne conserver de $ligne que ce qui se trouve entre les parenthèses
et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ?
Si la réponse est non, tu peux faire tout simplement :
preg_match_all("'[^']*'", $ligne, $matches [ , flags ]);
Si la réponse est oui, alors tu peux faire un premier preg_match qui te
donne le contenu des parenthèses, suivi par celui que je donne ci-dessus.
Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire :
preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
bonjour,
et merci.
alors :
en modifiant un poil (ajout des / et / comme délimiteurs dans le filtre
de recherche), sous peine de :
Warning: preg_match_all(): Unknown modifier ']' in essai1.php on line 3
donc avec :
preg_match_all( "/'[ t]*([^']*)[ t]*'/",
$ligne,
$parties,
PREG_PATTERN_ORDER );
j'obtiens bien ce que je recherchais soit :
$parties[1][0] à $parties[1][4]
je voudrai remplacer mon code str_replace (qui fonctionne) : par une regexp (plus générique) qui serait donc : ne conserver de $ligne que ce qui se trouve entre les parenthèses et en oter les apostrophes.
Peut-il y avoir des apostrophes dans « des mots qui_varient » ? Si la réponse est non, tu peux faire tout simplement : preg_match_all("'[^']*'", $ligne, $matches [ , flags ]); Si la réponse est oui, alors tu peux faire un premier preg_match qui te donne le contenu des parenthèses, suivi par celui que je donne ci-dessus. Par ailleurs, pour avoir la fonctionnalité du trim(), tu peux faire : preg_match_all("'[ t]*([^']*)[ t]*'", $ligne, $matches [ , flags ]);
bonjour, et merci.
alors : en modifiant un poil (ajout des / et / comme délimiteurs dans le filtre de recherche), sous peine de : Warning: preg_match_all(): Unknown modifier ']' in essai1.php on line 3
donc avec : preg_match_all( "/'[ t]*([^']*)[ t]*'/", $ligne, $parties, PREG_PATTERN_ORDER );
j'obtiens bien ce que je recherchais soit : $parties[1][0] à $parties[1][4]
mais au-dela de la magie du truc (!), j'aimerai comprendre :
[^']* ^^^^^ | QUE ce qui commence et finit par une apostrophe
Non. Un nombre quelconque (0 ou plus) de caractères qui NE sont PAS des apostrophes.
( [^']* ) ^ ^ |_________| ET se trouve entre parenthèses mais SANS les parenthèses
Euh... je dirais plutôt « à mettre dans $parties[1] »
[ t]* ([^']*) [ t]* ^^^^^^ ^^^^^^ |_______________| ET sans espace ni avant ni après
Plus exactement : il PEUT y avoir des espaces avant et après, mais elles ne seront pas dans $parties[1], seulement dans $parties[0]. Au passage, je ne crois pas que mon expression supprime vraiment les espaces après. Si tu en as besoin, il faudra peut-être faire un rtrim() ou améliorer la regexp.
' [ t]*([^']*)[ t]* ' ^ ^ |_______________________| ET sans apostrophe ni avant ni après
Plus exactement : il FAUT qu'il y ait une apostrophe avant et après, mais qui ne seront pas dans $parties[1], seulement dans $parties[0].
"/ '[ t]*([^']*)[ t]*' /" ^^ ^^ |___________________________| les délimiteurs
Oui, pardon.
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
alors :
en modifiant un poil (ajout des / et / comme délimiteurs [...]
Ah oui, j'avais oublié.
donc avec :
preg_match_all( "/'[ t]*([^']*)[ t]*'/",
$ligne,
$parties,
PREG_PATTERN_ORDER );
j'obtiens bien ce que je recherchais soit :
$parties[1][0] à $parties[1][4]
mais au-dela de la magie du truc (!), j'aimerai comprendre :
[^']*
^^^^^
|
QUE ce qui commence et finit
par une apostrophe
Non. Un nombre quelconque (0 ou plus) de caractères qui NE sont PAS des
apostrophes.
( [^']* )
^ ^
|_________|
ET se trouve entre parenthèses
mais SANS les parenthèses
Euh... je dirais plutôt « à mettre dans $parties[1] »
[ t]* ([^']*) [ t]*
^^^^^^ ^^^^^^
|_______________|
ET sans espace
ni avant ni après
Plus exactement : il PEUT y avoir des espaces avant et après, mais elles
ne seront pas dans $parties[1], seulement dans $parties[0]. Au passage,
je ne crois pas que mon expression supprime vraiment les espaces après.
Si tu en as besoin, il faudra peut-être faire un rtrim() ou améliorer la
regexp.
' [ t]*([^']*)[ t]* '
^ ^
|_______________________|
ET sans apostrophe
ni avant ni après
Plus exactement : il FAUT qu'il y ait une apostrophe avant et après,
mais qui ne seront pas dans $parties[1], seulement dans $parties[0].
"/ '[ t]*([^']*)[ t]*' /"
^^ ^^
|___________________________|
les délimiteurs
Oui, pardon.
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou
<http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
--
Olivier Miakinen
Troll du plus sage chez les conviviaux : le nouveau venu, avec
son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
mais au-dela de la magie du truc (!), j'aimerai comprendre :
[^']* ^^^^^ | QUE ce qui commence et finit par une apostrophe
Non. Un nombre quelconque (0 ou plus) de caractères qui NE sont PAS des apostrophes.
( [^']* ) ^ ^ |_________| ET se trouve entre parenthèses mais SANS les parenthèses
Euh... je dirais plutôt « à mettre dans $parties[1] »
[ t]* ([^']*) [ t]* ^^^^^^ ^^^^^^ |_______________| ET sans espace ni avant ni après
Plus exactement : il PEUT y avoir des espaces avant et après, mais elles ne seront pas dans $parties[1], seulement dans $parties[0]. Au passage, je ne crois pas que mon expression supprime vraiment les espaces après. Si tu en as besoin, il faudra peut-être faire un rtrim() ou améliorer la regexp.
' [ t]*([^']*)[ t]* ' ^ ^ |_______________________| ET sans apostrophe ni avant ni après
Plus exactement : il FAUT qu'il y ait une apostrophe avant et après, mais qui ne seront pas dans $parties[1], seulement dans $parties[0].
"/ '[ t]*([^']*)[ t]*' /" ^^ ^^ |___________________________| les délimiteurs
Oui, pardon.
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
-- Olivier Miakinen Troll du plus sage chez les conviviaux : le nouveau venu, avec son clan, s'infiltre dans les groupes de nouvelles. (3 c.)
Florian Sinatra
*Olivier Miakinen* @ 20/06/2006 15:40 :
"/ '[ t]*([^']*)[ t]*' /" ^^ ^^ |___________________________| les délimiteurs
Auxquels il faut faire attention : s'ils sont aussi présents dans le motif, c'est la cata. <http://expreg.com/expreg_article.php?art=apcre_delim>
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
Voir aussi : <www.expreg.com>
*Olivier Miakinen* @ 20/06/2006 15:40 :
"/ '[ t]*([^']*)[ t]*' /"
^^ ^^
|___________________________|
les délimiteurs
Auxquels il faut faire attention : s'ils sont aussi présents dans le
motif, c'est la cata. <http://expreg.com/expreg_article.php?art=apcre_delim>
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou
<http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
"/ '[ t]*([^']*)[ t]*' /" ^^ ^^ |___________________________| les délimiteurs
Auxquels il faut faire attention : s'ils sont aussi présents dans le motif, c'est la cata. <http://expreg.com/expreg_article.php?art=apcre_delim>
j'ai bon ?
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
Voir aussi : <www.expreg.com>
newdb
Olivier Miakinen <om+ wrote:
j'ai bon ?
bon. manifestement, il faut que je prépare la session de septembre...
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
ah. ok.
je traduis (« La chaîne de caractères PHP simple ou double guillemet a une signification spéciale des anti-slashs. ») ;
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
et je me donne quelques semaines pour assimiler ... ;-)
en tout cas, merci pour la référence (j'en était à <http://www.anaesthetist.com/mnm/perl/regex.htm> et à <http://www.comp.leeds.ac.uk/Perl/matching.html>...)
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Olivier Miakinen <om+news@miakinen.net> wrote:
j'ai bon ?
bon. manifestement, il faut que je prépare la session de septembre...
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou
<http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
ah. ok.
je traduis (« La chaîne de caractères PHP simple ou double guillemet a
une signification spéciale des anti-slashs. ») ;
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots
"char", "charmant", ou "charmant". Sans les parenthèses, il
n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
et je me donne quelques semaines pour assimiler ... ;-)
en tout cas, merci pour la référence
(j'en était à <http://www.anaesthetist.com/mnm/perl/regex.htm> et à
<http://www.comp.leeds.ac.uk/Perl/matching.html>...)
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="
bon. manifestement, il faut que je prépare la session de septembre...
Ben... c'est-à-dire... Lire peut-être <http://www.pcre.org/pcre.txt> ou <http://fr2.php.net/manual/fr/reference.pcre.pattern.syntax.php> ;-)
ah. ok.
je traduis (« La chaîne de caractères PHP simple ou double guillemet a une signification spéciale des anti-slashs. ») ;
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
et je me donne quelques semaines pour assimiler ... ;-)
en tout cas, merci pour la référence (j'en était à <http://www.anaesthetist.com/mnm/perl/regex.htm> et à <http://www.comp.leeds.ac.uk/Perl/matching.html>...)
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Thomas Harding
Le 20-06-2006, denisb a écrit :
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux choses: - elles délimitent les atomes (ce qui est décomposé de manière atomique). Ca, c'est que tu viens de nous sortir :) - elles donnent une référence, qu'on peut utiliser dans la deuxième partie de l'expression, qui peut être le remplacement (cas de preg_replace: 1 va te sortir 'don' ou 'mant' ou ''), ou, cas de preg_match_all, la variable placée dans l'argument 'match' te sortira $match[0] = "la même chose que le 1 du replace", et l'indice max augmentera autant de fois que le motif sortira : "char charmant chardon" => array( 0 => "", 1 => "mant", 2 => "don");
J'espère avoir été clair. Pour plus de détail, voir le bouquin « Comprendre les expressions rationnelles » chez O'Reilly (un pavé indigeste que je ferais bien de finir, voire de recommencer à lire).
et je me donne quelques semaines pour assimiler ... ;-)
'va falloir, mais personnellement, je n'ai _jamais_ fini de les assimiler, et pourtant j'en accouche difficilement cinq ou six par semaine (je ne compte pas les trucs bateaux en uniligne style grep -ve "^[t ]*$" machin > truc). :)
-- Thomas Harding
Le 20-06-2006, denisb <newdb@no-log.org> a écrit :
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots
"char", "charmant", ou "charmant". Sans les parenthèses, il
n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux
choses:
- elles délimitent les atomes (ce qui est décomposé de manière
atomique). Ca, c'est que tu viens de nous sortir :)
- elles donnent une référence, qu'on peut utiliser dans la deuxième
partie de l'expression, qui peut être le remplacement (cas de
preg_replace: \1 va te sortir 'don' ou 'mant' ou ''), ou, cas de
preg_match_all, la variable placée dans l'argument 'match' te
sortira $match[0] = "la même chose que le \1 du replace", et
l'indice max augmentera autant de fois que le motif sortira :
"char charmant chardon" => array( 0 => "", 1 => "mant", 2 =>
"don");
J'espère avoir été clair. Pour plus de détail, voir le bouquin
« Comprendre les expressions rationnelles » chez O'Reilly (un pavé
indigeste que je ferais bien de finir, voire de recommencer à lire).
et je me donne quelques semaines pour assimiler ... ;-)
'va falloir, mais personnellement, je n'ai _jamais_ fini de les
assimiler, et pourtant j'en accouche difficilement cinq ou six par
semaine (je ne compte pas les trucs bateaux en uniligne style
grep -ve "^[t ]*$" machin > truc). :)
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux choses: - elles délimitent les atomes (ce qui est décomposé de manière atomique). Ca, c'est que tu viens de nous sortir :) - elles donnent une référence, qu'on peut utiliser dans la deuxième partie de l'expression, qui peut être le remplacement (cas de preg_replace: 1 va te sortir 'don' ou 'mant' ou ''), ou, cas de preg_match_all, la variable placée dans l'argument 'match' te sortira $match[0] = "la même chose que le 1 du replace", et l'indice max augmentera autant de fois que le motif sortira : "char charmant chardon" => array( 0 => "", 1 => "mant", 2 => "don");
J'espère avoir été clair. Pour plus de détail, voir le bouquin « Comprendre les expressions rationnelles » chez O'Reilly (un pavé indigeste que je ferais bien de finir, voire de recommencer à lire).
et je me donne quelques semaines pour assimiler ... ;-)
'va falloir, mais personnellement, je n'ai _jamais_ fini de les assimiler, et pourtant j'en accouche difficilement cinq ou six par semaine (je ne compte pas les trucs bateaux en uniligne style grep -ve "^[t ]*$" machin > truc). :)
-- Thomas Harding
newdb
Thomas Harding wrote:
Le 20-06-2006, denisb a écrit :
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ; les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux
choses:
oui oui. c'était une boutade (prétentieuse) de ma part : corriger «...acceptera les mots "char", "charmant", ou "charmant"...» par «...acceptera les mots "char", "chardon", ou "charmant"...» ________________________________________^^^
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="
Thomas Harding <thomas.harding@wanadoo.fr> wrote:
Le 20-06-2006, denisb <newdb@no-log.org> a écrit :
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots
"char", "charmant", ou "charmant". Sans les parenthèses, il
n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ;
les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux
choses:
oui oui.
c'était une boutade (prétentieuse) de ma part :
corriger «...acceptera les mots "char", "charmant", ou "charmant"...»
par «...acceptera les mots "char", "chardon", ou "charmant"...»
________________________________________^^^
--
@@@@@
E -00 comme on est very beaux dis !
' `) /
|_ =="
je corrige (« Par exemple, le masque char(don|mant|) acceptera les mots "char", "charmant", ou "charmant". Sans les parenthèses, il n'accepterait que "chardon", "mant" ou la chaîne vide "". ») ; les parenthèses (lorsqu'elles ne sont pas échappées par ), font deux
choses:
oui oui. c'était une boutade (prétentieuse) de ma part : corriger «...acceptera les mots "char", "charmant", ou "charmant"...» par «...acceptera les mots "char", "chardon", ou "charmant"...» ________________________________________^^^
-- @@@@@ E -00 comme on est very beaux dis ! ' `) / |_ =="