J'ai besoin d'extraire d'une chaîne un ensemble de caractères qui sont inclus entre deux délimiteurs, sans retourner les délimiteurs eux-mêmes.
Un exemple simple devrait être utile:
Cible : extraire la sous-chaîne entre crochets, sans renvoyer les crochets eux-mêmes.
Chaîne de base :This is a test string [more or less]
Si j'utilise le reg suivant. ex.
\ [. *? \]
Le match est [more or less]
. Je dois obtenir seulement more or less
(sans les crochets).
Est-il possible de le faire?
Réponses:
Facile à faire:
Techniquement, cela utilise des lookaheads et des lookbehinds. Voir Lookahead et Lookbehind Zero-Width Assertions . Le motif se compose de:
Alternativement, vous pouvez simplement capturer ce qui se trouve entre les crochets:
et renvoyez le premier groupe capturé au lieu du match entier.
la source
This is a test string [more [or] less]
ce retourmore [or] less
?Si vous utilisez JavaScript , la première solution fournie par cletus,
(?<=\[)(.*?)(?=\])
ne fonctionnera pas, car JavaScript ne prend pas en charge l'opérateur Lookbehind.Cependant, la deuxième solution fonctionne bien, mais vous devez obtenir le deuxième élément correspondant.
Exemple:
Il renverra:
Donc, ce dont vous avez besoin est la deuxième valeur. Utilisation:
Rendre:
la source
Il vous suffit de «capturer» le bit entre les crochets.
Pour le capturer, mettez-le entre parenthèses. Vous ne dites pas quelle langue cela utilise. En Perl par exemple, vous y accéderez en utilisant la variable $ 1.
D'autres langues auront des mécanismes différents. C #, par exemple, utilise la classe de collection Match , je crois.
la source
[^\[]
Correspond à n'importe quel caractère qui n'est pas [.+
Faites correspondre 1 ou plus de tout ce qui ne l'est pas[
. Crée des groupes de ces correspondances.(?=\])
Anticipation positive]
. Correspond à un groupe se terminant par]
sans l'inclure dans le résultat.Terminé.
Preuve.
http://regexr.com/3gobr
Similaire à la solution proposée par null. Mais le supplément
\]
n'est pas requis. Comme note supplémentaire, il ne semble\
pas nécessaire de s'échapper[
après^
. Pour plus de lisibilité, je le laisserais dedans.Ne fonctionne pas dans la situation où les délimiteurs sont identiques.
"more or less"
par exemple.la source
PHP:
la source
Pour supprimer également l'utilisation de []:
la source
J'ai eu le même problème en utilisant regex avec les scripts bash. J'ai utilisé une solution en 2 étapes en utilisant des tuyaux avec grep -o en appliquant
d'abord, puis
Évidemment pas aussi efficace pour les autres réponses, mais une alternative.
la source
Celui-ci fonctionne spécifiquement pour l'analyseur d'expressions régulières de javascript
/[^[\]]+(?=])/g
il suffit d'exécuter cela dans la console
la source
Je voulais trouver une chaîne entre / et #, mais # est parfois facultatif. Voici l'expression régulière que j'utilise:
la source
Voici comment je me suis débrouillé sans «[» et «]» en C #:
La sortie est:
la source
Si vous avez besoin d'extraire le texte sans les crochets, vous pouvez utiliser bash awk
echo " [hola mundo] " | awk -F'[][]' '{print $2}'
résultat:
hola mundo
la source