PHP domanda preg_match
-
19-09-2019 - |
Domanda
Come posso abbinare le tre parole del seguente stringa con un Perl espressioni regolari compatibili?
parola1 # $ # $ parola2 parola3
Non so le parole reali "parola1, word2 e parola3" di anticipo. So solo il separatore, che è # $.
E non posso usare la parola di confine come ho una codifica multibyte. Questo significa per esempio che la stringa può contenere caratteri non ASCII come dieresi che non vengono rilevati dal carattere di controllo w \.
Soluzione
Prova questa espressione regolare:
/(\w+)#\$(\w+)#\$(\w+)/
Modifica Dopo la vostra ci ha fornito ulteriori informazioni (vedi i commenti a questa risposta):
/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
Altri suggerimenti
#!/usr/bin/perl
use strict;
use warnings;
my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);
Regex è eccessivo per questo.
Una funzione split può essere utile anche se dipende da cosa si vuole fare con la linea.
ecco un esempio però.
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
Questo funziona per qualsiasi stringa che ha 2 #
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/