Вопрос

Как сопоставить три слова в следующей строке с регулярным выражением, совместимым с Perl?

слово1#$слово2#$слово3

Я заранее не знаю настоящих слов «слово1, слово2 и слово3».Я знаю только разделитель #$.

И я не могу использовать границу слова, поскольку у меня многобайтовая кодировка.Это означает, например, что строка может содержать символы, отличные от ASCII, такие как умлауты, которые не обнаруживаются управляющим символом \w.

Это было полезно?

Решение

Попробуйте это регулярное выражение:

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

РедактироватьПосле того, как вы предоставили нам дополнительную информацию (см. комментарии к этому ответу):

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

Другие советы

#!/usr/bin/perl

use strict;
use warnings;

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

Regex для этого излишен.

Функция разделения может оказаться полезной, хотя это зависит от того, что вы хотите сделать с линией.

хотя вот пример.

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

Это будет работать для любой строки, имеющей 2 #

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top