2011-07-18 25 views
7

Estoy tratando de hacer coincidir todo dentro de los corchetes dobles en una cadena. Estoy utilizando la siguiente expresión:Expresión regular de Java para que coincida con {{caracteres dentro de llaves dobles}}

\{\{.*\}\} 

Algunos ejemplos:

The {{dog}} is not a cat. Esto coincide correctamente {{perro}}

Sin embargo,
The {{dog}} is a {{cat}} partidos todo después de que el primer partido en lugar de regresar dos partidos. Quiero que coincida dos veces, una para {{dog}} y otra para {{cat}}

¿Alguien sabe cómo hacer esto?

Gracias.

+1

Regex usa un algoritmo ambicioso (y por lo tanto quiere agarrar una cuerda tan grande como corresponda). ¿Eso ayuda o necesitas más? – rajah9

+0

Esto debería hacer el trabajo \ {\ {. *? \} \} – DaMainBoss

+0

Si recibiste tu respuesta acepta la que más te ha ayudado – RMT

Respuesta

7

El codicioso .* partidos nada (excepto los saltos de línea), por lo que cuando hay más de un }} en la cadena, siempre coincide con el último }} (si no hay ningún \r y \n entre los dos }}!).

tratar de hacer el partido .* reacios (ungreedy) así:

\{\{.*?}} 

Eso es correcto, no es necesario escapar de la }.

También podría hacer:

\{\{[^}]*}} 

si un {{ ... }} no puede contener un solo } sí.

1

usted tiene que usar partido no expansivo:

\{\{.*?\}\} 

para que coincida con lo que entre los apoyos, el uso:

\{\{(.*?)\}\} 
0

Lo que se necesita es el modificador "no voraz" - para que su expresión regular es \{\{.+?\}\}

5

intento con \{\{.*?\}\}

creo que es porque el patrón que tiene es codicioso.

Wikipedia lo explica bastante bien.

Cuestiones relacionadas