Pregunta

¿Cómo se puede hacer coincidir las tres palabras en la siguiente cadena con una expresión regular compatible Perl?

palabra1 # $ # $ palabra2 word3

No sé las palabras reales "palabra1, palabra2 y word3" de antelación. Sólo sé el separador, que es # $.

Y no puedo utilizar el límite de palabra ya que tengo una codificación de varios bytes. Esto significa por ejemplo que la cadena puede contener caracteres no ASCII como diéresis que no son detectados por el carácter de control w \.

¿Fue útil?

Solución

Probar expresión regular:

/(\w+)#\$(\w+)#\$(\w+)/

Editar Después nos proporcionó más información (véanse los comentarios a esta respuesta):

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/

Otros consejos

#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);

Regex es una exageración para esto.

Una función de división podría ser útil, aunque depende de lo que quiere hacer con la línea.

aquí es un ejemplo sin embargo.

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)

Esto funciona para cualquier cadena que tiene 2 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top