Question

How can I match the three words in the following string with a Perl compatible regular expression?

word1#$word2#$word3

I don't know the actual words "word1, word2 and word3" in advance. I only know the separator, which is #$.

And I can't use the word boundary as I have a multibyte encoding. This means for instance that the string can contain non-ASCII characters like umlauts which are not detected by the \w control character.

Was it helpful?

Solution

Try this regular expression:

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

Edit   After your provided us with more information (see the comments to this answer):

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

OTHER TIPS

#!/usr/bin/perl

use strict;
use warnings;

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

Regex is overkill for this.

A split function might be useful although it depends what you want to do with the line.

here is an example though.

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

This will work for any string that has 2 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top