如何在下面的字符串的三个词匹配一个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 #

的任何字符串工作
/([^#]+)\#\$([^#]+)\#\$([^#]+)/
/([^#]*?)#\$([^#]*?)#\$([^#]*)/
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top