pergunta PHP preg_match
-
19-09-2019 - |
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.
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 #
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/