2011-02-21 318 views
13

¿Qué es la expresión regular para encontrar las cadenas que comienzan con [y terminan con]. Entre [y] todo tipo de personaje están bien.RegEx comienza con [y termina en]

+0

¿Está tratando de encontrar estas cadenas dentro de un cuerpo de texto más grande? Si es así, ¿se pueden anidar los corchetes? –

+0

Sí, estoy tratando de encontrar las cuerdas en un cuerpo más grande. Pero no estoy esperando los paréntesis anidados. – KBBWrite

Respuesta

21

[ y ] son caracteres especiales en las expresiones regulares, por lo que necesita para escapar de ellos. Esto debería funcionar para usted:

\[.*?\] 

.*? hace comparaciones no expansivo de cualquier carácter. El aspecto no codicioso asegura que coincidirá con [abc] en lugar de [abc]def]. Agregue un ^ líder y un $ posterior si desea hacer coincidir toda la cadena, p. no hay coincidencia alguna en abc[def]ghi.

+1

Gracias. Esto funcionó para mí. – KBBWrite

9
^\[.*\]$ 

coincidirá con una cadena que comienza con [ y termina con ]. En C#:

foundMatch = Regex.IsMatch(subjectString, @"^\[.*\]$"); 

Si usted está buscando cadenas soporte delimitado dentro de cadenas más largas (por ejemplo, encontrar [bar] dentro foo [bar] baz), a continuación, utilizar

\[[^[\]]*\] 

en C#:

MatchCollection allMatchResults = null; 
Regex regexObj = new Regex(@"\[[^[\]]*\]"); 
allMatchResults = regexObj.Matches(subjectString); 

Explicación:

\[  # match a literal [ 
[^[\]]* # match zero or more characters except [ or ] 
\]  # match a literal ] 
+0

No estoy seguro si la respuesta suya o de Thecoop es la mejor, pero asumo la suya porque el OP nunca mencionó que debería haber CUALQUIER carácter entre el [y], y por lo tanto su '*' es una mejor coincidencia que thecoop's '+ '. – Bazzz

7

esto debería funcionar:

^\[.+\]$ 

^ es 'inicio de cadena'
\[ es un escaparon [porque [es un carácter de control
.+ partidos todas las cadenas de longitud> = 1 (. es 'cualquier carácter', + significa 'coincide con el patrón anterior una o más veces')
\] es un escapado]
$ es 'end of strin' g'

Si desea hacer coincidir [], así, cambiar el + a un * ('cero o más veces')

A continuación, utilice la clase Regex para que coincida con:

bool match = Regex.IsMatch(input, "^\[.+\]$"); 

o , si está usando esto varias veces o en un bucle, crear una instancia Regex para un mejor rendimiento:

private static readonly Regex s_MyRegexPatternThingy = new Regex("^\[.+\]$"); 

bool match = s_MyRegexPatternThingy.IsMatch(input); 
+0

La expresión trabajada es \ [. *? \]; Sin embargo, su descripción también es útil – KBBWrite

1

Debe usar el carácter de escape \ para corchetes.
Utilice .+ si desea tener al menos 1 carácter entre corchetes o .* si acepta esta cadena: [].

^\[.*\]$ 
Cuestiones relacionadas