Expresiones regulares en C++ usando Boost

Hasta ahora... tengo esta cadena de prueba:

Hello {John|Paul|Cindy}, hows {david}?

y mi expresión es:

(\{\w+\})

Sin embargo, solo devuelve a david. Quiero poder agarrar a John, Paul y Cindy. Solo habría 0 o 2 barras verticales. ¿algunas ideas?

Muchas Gracias

preguntado el 04 de julio de 12 a las 00:07

\w coincide con un carácter normal. Pero | es ninguno Por lo tanto, solo coincide con {david}. {John|Paul|Cindy} no coincide porque contiene símbolos | que no están contenidos en \w. Pero no estoy seguro de lo que quieres lograr. -

sí, lo veo, solo quiero tomar todos los nombres. -

2 Respuestas

Si no es algún tipo de competencia, simplemente usaría dos expresiones regulares:

{[\w|]+} para agarrar cada par de corchetes junto con su contenido, luego, en cada resultado, \w+ para extraer palabras.

No puede ser más simple usando solo una expresión regular.

Respondido 04 Jul 12, 15:07

Si solo 0 o 2 barras verticales:

(\{\w+\}|\{\w+\|\w+\|\w+\})

Para 0 o más:

(\{\w+(\|\w+)*\})

Respondido 04 Jul 12, 00:07

tu primera respuesta solo toma el primer nombre - chico imprudente

Estoy usando rubular.com si desea verificar la cadena anterior con su expresión. - chico imprudente

Sí, cometo un error. De todos modos, es mejor editar el comentario y luego publicar dos veces. - Arpegio

Aquí hay otra versión para 0, 1 o 2: (\{\w+\|{0,1}\w+\|{0,1}\w+\}) (Sin embargo, tal vez no quiera retomar cuando solo hay 1 barra vertical). - Jesse bueno

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.