题
如何在下面的字符串的三个词匹配一个Perl兼容正则表达式?
WORD1#$ WORD2#$ WORD3
我不知道事先实际的话“字词1,单词2和WORD3”。我只知道分离器,这是#$。
和作为我有一个多字节编码我不能使用字边界。这意味着例如,该字符串可以包含等,其没有被\ W控制字符检测到元音变音非ASCII字符。
解决方案
尝试此正则表达式:
/(\w+)#\$(\w+)#\$(\w+)/
修改后,你有更多的信息(见注释此答案)为我们提供了:
/((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)#\$((?:[^#]+|#[^$])*)/
其他提示
#!/usr/bin/perl
use strict;
use warnings;
my $x = 'word1#$word2#$word3';
print $_, "\n" for split /#\$/, $x;
$str = explode('#$', $str);
正则表达式是矫枉过正此。
虽然这取决于你想用线做一个分流的功能可能是有用的。
这里是一个例子虽然。
my $line = "word1#$word2#$word3"
my @words = split('#$', $line)
这将用于具有2 #
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
不隶属于 StackOverflow