Regex para dividir BBCode en pedazos

Tengo esto:

str = "some html code [img]......[/img] some html code [img]......[/img]" 

y quiero obtener esto:

 ["[img]......[/img]","[img]......[/img]"] 

 irb(main):001:0> str = "some html code [img]......[/img] some html \ code [img]......[/img]" "some html code [img]......[/img] some html code [img]......[/img]" irb(main):002:0> str.scan(/\[img\].*?\[\/img\]/) ["[img]......[/img]", "[img]......[/img]"] 

Tenga en cuenta que esta es una respuesta muy específica que se basa en su pregunta exacta. Cambie str , digamos, agregando una etiqueta de imagen dentro de una etiqueta de imagen , y todo el infierno se desatará .

Por favor, no use BBCode. Es malvado

BBCode cobró vida cuando los desarrolladores eran demasiado perezosos para analizar HTML correctamente y decidieron inventar su propio lenguaje de marcado. Al igual que con todos los productos de la pereza, el resultado es completamente inconsistente, no estandarizado y ampliamente adoptado.

Intente utilizar un lenguaje de marcado más amigable para el usuario, como Markdown (eso es lo que usa Stack Overflow) o Textil . Ambos tienen analizadores para Ruby:

  • Maruku para Markdown
  • RedCloth para Textil

Si todavía no quiere seguir mi consejo y elige ir con BBCode, no reinvente la rueda y use un analizador de BBCode . Para responder a su pregunta directamente, existe la opción menos deseable: usar expresiones regulares.

 /\[img\].*?\[\/img\]/ 

Como se ve en rubular . Aunque usaría /\[img\](.*?)\[\/img\]/ , para extraer el contenido dentro de las tags img . Tenga en cuenta que esto es bastante frágil y se romperá si hay tags img anidadas. Por lo tanto, el consejo de usar un analizador.

Hay un analizador de BBCODE ruby en Google Code.

No use regex para esto.

 str = "some html code [img]......[/img] some html code [img]......[/img]" p str.split("[/img]").each{|x|x.sub!(/.*\[img\]/,"")} 
Intereting Posts