我可以使用完整的单词来分割字符串吗?

时间:2019-02-13 22:22:56

标签: perl split

这可能是一个简单的问题。我有一个与内容一致的字符串。它将包含单词"IMAGE"。我希望能够对此单词进行拆分,以便在单词之后获得内容。我尝试过:

my @sname = split('IMAGE', $fshare);

$fshare包含一个字符串,例如'\\Disk\InfoIMAGEstuff'。我想要'stuff'部分。

2 个答案:

答案 0 :(得分:3)

split的第一个参数是正则表达式模式,而不是字符串。您可以传递第三个参数作为限制,以防止它分成两个以上的字符串(不止一次)。

my ($before, $after) = split /IMAGE/, $fshare, 2;

如果要分割的字符串包含正则表达式元字符,则需要使用\Q,以便按字面意义对该字符串进行解释。

my ($before, $after) = split /\Qfoo.bar/, $fshare, 2;

如果只关心定界符后面的内容,则可以使用简单的regex capture来检索它。

my ($after) = $fshare =~ m/IMAGE(.*)/s;

/s修饰符允许.附加匹配换行符。

答案 1 :(得分:2)

如果只想在字符串后得到零件,则可以避免同时使用split(和RegEx引擎),而应使用字符串ops。

my $string = '\\Disk\InfoIMAGEstuff';
my $delim  = 'IMAGE';
my $post   = substr($string, index($string, $delim) + length($delim));

它不是很漂亮,但是它的基准测试速度是使用split的两倍。即使我们正在调用3个函数(substrindexlength),像这样的字符串操作都非常快。

在此示例中,index$delim的第一个匹配项匹配。如果要匹配最后一次出现,请改用rindex