2017-10-11 7 views
0

J'essaye d'écrire regexp, qui peut correspondre à tout le texte entre les parenthèses et les parenthèses aussi. Mais avec une condition: la première parenthèse peut être manquée. Par exemple:Obtenez tout le texte entre parenthèses si la première parenthèse est manquée avec Regex

Aujourd'hui est [jour ensoleillé]

et

Aujourd'hui est la journée ensoleillée]

En premier cas, je veux obtenir [jour ensoleillé]. En second je veux obtenir Aujourd'hui est une journée ensoleillée].

J'ai écrit regexp mais cela ne fonctionne que dans le premier cas.

(?(?=\[).*?|)\]

J'ai essayé de mettre l'action d'autre comme ce

(?(?=\[).*?|.*?)\]

mais dans ce cas j'ai eu Aujourd'hui [jour ensoleillé] au lieu d'[jour ensoleillé].

Existe-t-il une expression régulière pouvant résoudre mon problème?

+1

'(\ [* \.?] |^[^ \ [\]] * \])' Peut-être travaux? – apokryfos

+3

'\ [? [^ \] \ [] * \]' Devrait suffire. –

+0

merci les deux travaillent !!! –

Répondre

1

En supposant que les supports imbriqués ne sont pas à considérer que vous pouvez simplement utiliser

\[?[^\]\[]*\] 

ou avec un peu moins échapper

\[?[^][]*] 

Cela en option correspondre à une ouverture carrée support, tout contenu ne contient pas de crochet et le crochet de fermeture.

Voir https://regex101.com/r/97F2wM/1

(ajouté \n à la classe de caractères niée pour éviter tout chevauchement ligne)