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 \.

È stato utile?

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 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top