Pergunta

Como posso combinar as três palavras a seguinte cadeia com uma expressão regular compatível com Perl?

word1 # $ word2 # $ word3

Eu não sei as palavras reais "word1, word2 e word3" com antecedência. Eu só sei o separador, que é # $.

E eu não posso usar o limite de palavra como eu tenho uma codificação multibyte. Isto significa, por exemplo, que a cadeia pode conter caracteres não-ASCII como tremas que não são detectadas pelo \ w carácter de controlo.

Foi útil?

Solução

Tente esta expressão regular:

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

Editar Após a sua forneceu-nos com mais informações (ver os comentários a esta resposta):

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

Outras dicas

#!/usr/bin/perl

use strict;
use warnings;

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

Regex é um exagero para isso.

A função de divisão pode ser útil, embora isso depende do que você quer fazer com a linha.

aqui é um exemplo embora.

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

Isto irá funcionar para qualquer cadeia que tem 2 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top