如何将以下字符串中的三个单词与 Perl 兼容的正则表达式匹配?
单词1#$word2#$word3
我事先不知道实际的单词“word1、word2 和 word3”。我只知道分隔符,即#$。
而且我不能使用单词边界,因为我有一个多字节编码。这意味着,例如,字符串可以包含非 ASCII 字符,如变音符号,\w 控制字符无法检测到这些字符。
如何将以下字符串中的三个单词与 Perl 兼容的正则表达式匹配?
单词1#$word2#$word3
我事先不知道实际的单词“word1、word2 和 word3”。我只知道分隔符,即#$。
而且我不能使用单词边界,因为我有一个多字节编码。这意味着,例如,字符串可以包含非 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);
正则表达式对此太过分了。
这适用于任何具有 2#
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
拆分功能可能很有用,尽管它取决于您想对线做什么。
这是一个例子。
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
/([^#]*?)#\$([^#]*?)#\$([^#]*)/