我有一个函数,其目的是提取在两个分隔符之间找到的子字符串。我会使用正则表达式,但在这种情况下,我有明确的指示不使用它们。
我有一个更简单,更优雅的解决方案,只有一行,但我不能为我的生活记住或找到它。
sub findBetween {
my ($theString,$delimiter1,$delimiter2) = (@_);
my $tmp = substr($theString, index($theString,$delimiter1)+length($delimiter1));
$tmp = substr($tmp, 0, index($tmp,$delimiter2));
return $tmp;}
感谢您查看此问题,我知道这是非常基本的,有点多余。我需要的是一个更简单的解决方案,涉及perl基本功能,没有正则表达式。
答案 0 :(得分:1)
您可以使用两个index()
调用来定位两个分隔符,并使用索引在它们之间提取字符串,
sub findBetween {
my ($theString,$delimiter1,$delimiter2) = @_;
my $i1 = index($theString, $delimiter1, 0) + length($delimiter1);
my $i2 = index($theString, $delimiter2, $i1);
return substr($theString, $i1, $i2-$i1);
}
print findBetween("111--2222~~333", "--", "~~"), "\n";
输出
2222
答案 1 :(得分:0)
我只想使用index
use strict;
use warnings;
my $string = "hello my world";
my $substr = "my";
if (index($string, $substr) != -1) {
print "$substr found in $string";
}
摘自perldoc
•索引STR,SUBSTR,POSITION
•索引STR,SUBSTR
索引函数在另一个字符串中搜索一个字符串,但没有完整正则表达式模式匹配的类似通配符的行为。它返回POS在POSITION时或之后第一次出现的SUBSTR的位置。如果省略POSITION,则从字符串的开头开始搜索。字符串开头之前或结束之后的POSITION分别被视为开头或结尾。 POSITION和返回值基于零。如果未找到子字符串,则索引返回-1。