如何将以下字符串中的三个单词与Perl兼容的正则表达式匹配?
WORD1#$ WORD2#$ WORD3
我事先并不知道实际的单词“word1,word2和word3”。我只知道分隔符,即#$。
我不能使用单词边界,因为我有多字节编码。这意味着,例如,字符串可以包含非ASCII字符,如变音符号,\ w控制字符无法检测到。
答案 0 :(得分:2)
试试这个正则表达式:
/(\w+)#\$(\w+)#\$(\w+)/
修改在您向我们提供了更多信息后(请参阅此答案的评论):
/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
答案 1 :(得分:1)
#!/usr/bin/perl
use strict;
use warnings;
my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
答案 2 :(得分:1)
$str = explode('#$', $str);
正则表达式对此有点过分。
答案 3 :(得分:0)
这适用于任何包含2 #
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
答案 4 :(得分:0)
分割功能可能很有用,虽然它取决于你想要对线做什么。
这是一个例子。
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
答案 5 :(得分:-2)
/([^#]*?)#\$([^#]*?)#\$([^#]*)/