这可能是一个简单的问题。我有一个与内容一致的字符串。它将包含单词"IMAGE"
。我希望能够对此单词进行拆分,以便在单词之后获得内容。我尝试过:
my @sname = split('IMAGE', $fshare);
$fshare
包含一个字符串,例如'\\Disk\InfoIMAGEstuff'
。我想要'stuff'
部分。
答案 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个函数(substr
,index
和length
),像这样的字符串操作都非常快。
在此示例中,index
与$delim
的第一个匹配项匹配。如果要匹配最后一次出现,请改用rindex
。