0

如何将以下字符串中的三个单词与 Perl 兼容的正则表达式匹配?

单词1#$word2#$word3

我事先不知道实际的单词“word1、word2 和 word3”。我只知道分隔符,即#$。

而且我不能使用单词边界,因为我有一个多字节编码。这意味着,例如,字符串可以包含非 ASCII 字符,如变音符号,\w 控制字符无法检测到这些字符。

4

6 回答 6

2

试试这个正则表达式:

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

编辑   在您向我们提供更多信息后(请参阅对此答案的评论):

/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
于 2009-07-24T17:56:08.423 回答
1
#!/usr/bin/perl

use strict;
use warnings;

my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
于 2009-07-24T18:00:18.103 回答
1
$str = explode('#$', $str);

正则表达式对此太过分了。

于 2009-07-24T18:23:21.193 回答
0

这适用于任何具有 2#

/([^#]+)\#\$([^#]+)\#\$([^#]+)/
于 2009-07-24T18:01:15.700 回答
0

拆分功能可能很有用,尽管它取决于您想对线做什么。

这是一个例子。

my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
于 2009-07-24T18:07:36.560 回答
-2
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
于 2009-07-24T18:02:58.847 回答