2009-07-24 3 views
0

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

word1 # $ # $ word2 word3

Я не знаю, фактические слова "word1, WORD2 и word3" заранее. Я знаю только разделитель, который равен # $.

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

+4

А как насчет сплита? – Dario

+0

Вы используете Perl или какой-либо другой язык, который утверждает, что имеет регулярные выражения Perl? –

+0

Я использую PHP preg_match – prinzdezibel

ответ

2

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

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

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

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

Нельзя использовать границу слова, поскольку слово может быть практически всем, что не состоит из двух последовательных символов. # $ – prinzdezibel

1
#!/usr/bin/perl 

use strict; 
use warnings; 

my $x = 'word1#$word2#$word3'; 
print $_, "\n" for split /#\$/, $x; 
+0

Я предполагаю, что он спрашивает о регулярном выражении – joe

+0

@Kirsh. Инструмент Perl для использования здесь 'split' –

+0

I здесь требуется регулярное выражение, поскольку это служит только подвыражением. – prinzdezibel

0

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

/([^#]+)\#\$([^#]+)\#\$([^#]+)/ 
+0

Это не работает, так как оно соответствует знаку доллара. – prinzdezibel

-2
/([^#]*?)#\$([^#]*?)#\$([^#]*)/ 
+2

Это не работает для wor # d1 # $ word2 # $ word3 , который был бы действительным, так как разделитель всегда является символом хэша, следующим за символом доллара – prinzdezibel

+0

Было бы полезно объяснить, что делает это регулярное выражение, а не просто отбрасывать его здесь без документов. – Kev

0

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

вот пример.

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