ti pb sur exp reguliere

WRInaute discret
bonjour,

je souhaite selectionner un block commençant par - [ et finissant par ]

comment dois- je ecrire ma regle?

j ai essayé ça ^-.[(.*).]$
, mais marche poa.

merci de votre aide ;)
 
WRInaute passionné
Bonjour,

Ca ne marche pas parce que les crochets sont des caractères ayant une signification particulière pour les expressions régulières. Il faut les échapper si on veut les utiliser comme de simples caractères.

Donc a priori, ce serait quelque chose comme ça :

Code:
/^- \[(.*)\]$/

Si c'est en PHP :

Code:
<?php
preg_match('/^- \[(.*)\]$/', $ta_chaine, $matches);
echo $matches[1];
?>

http://fr.php.net/preg_match

Fred
 
WRInaute discret
George Abitbol a dit:
Ca ne marche pas parce que les crochets sont des caractères ayant une signification particulière pour les expressions régulières. Il faut les échapper si on veut les utiliser comme de simples caractères.

Donc a priori, ce serait quelque chose comme ça :

Code:
/^- \[(.*)\]$/

Si c'est en PHP :

Code:
<?php
preg_match('/^- \[(.*)\]$/', $ta_chaine, $matches);
echo $matches[1];
?>

http://fr.php.net/preg_match

Fred

Merci fred.

i me semblait bi1 qui avait un truc a rajouter pour les caracteres particuliers.

Le - par contre, est il considéré comme tel?

Sinon, j ai pas l impression que le code fonctionne


J ai repris le code php

<?
$tachaine="chou - [ bla bla ] 26:)";
preg_match('/^- \[(.*)\]$/', $ta_chaine, $matches);
echo $matches[1];
?>

et rien s affiche alors que je souhaite ainsi ds cette ex: chou 26:)

Ou es l erreur??

thks
 
WRInaute passionné
Euh... je comprends plus trop, là... Tu dis vouloir sélectionner le bloc compris entre - [ et ]. Donc dans ton exemple ce serait bla bla et pas chou 26:) comme tu le dis ensuite.

Donc :

- si tu veux récupérer bla bla dans chou - [ bla bla ] 26:), tu fais :

Code:
<?php
$ta_chaine = "chou - [ bla bla ] 26:)";
preg_match('/- \[(.*)\]/', $ta_chaine, $matches);
echo $matches[1]; // affiche bla bla
?>

- si tu veux supprimer bla bla dans chou - [ bla bla ] 26:), tu fais :

Code:
<?php
$ta_chaine = "chou - [ bla bla ] 26:)";
echo preg_replace('/- \[(.*)\]/', '', $ta_chaine); // affiche chou 26:)
?>

:!: Attention, tu avais mis $tachaine au début et $ta_chaine par la suite :!:

Fred
 
WRInaute discret
George Abitbol a dit:
Euh... je comprends plus trop, là... Tu dis vouloir sélectionner le bloc compris entre - [ et ]. Donc dans ton exemple ce serait bla bla et pas chou 26:) comme tu le dis ensuite.

Fred

exact, j ai vu ça aprés :oops:

merci encore et là ça devrait le faire ;)))
 
WRInaute discret
George Abitbol a dit:
- si tu veux récupérer bla bla dans chou - [ bla bla ] 26:), tu fais :

Code:
<?php
$ta_chaine = "chou - [ bla bla ] 26:)";
preg_match('/- \[(.*)\]/', $ta_chaine, $matches);
echo $matches[1]; // affiche bla bla
?>

Pour etre tout a fait complet
- si tu veux recuperer TOUT (y compris un caractere ']') entre le 1er '[' et le dernier ']' :
utilise /- \[(.*)\][^\]]*$/
- sinon
/- \[[^\]*\]/ est "mieux" que /- \[(.*)\]/

[^\]]* veut dire "tout sauf le car. ']' "
alors que .* veut dire "tout (y compris le car. ])"
 
WRInaute discret
JC91 a dit:
Pour etre tout a fait complet
- si tu veux recuperer TOUT (y compris un caractere ']') entre le 1er '[' et le dernier ']' :
utilise /- \[(.*)\][^\]]*$/
- sinon
/- \[[^\]*\]/ est "mieux" que /- \[(.*)\]/

[^\]]* veut dire "tout sauf le car. ']' "
alors que .* veut dire "tout (y compris le car. ])"

:arrow: Merci pour ces precisions JC91, qui peuvent dans certains cas poser pb
 
Discussions similaires
Haut