我是perl的新手,我通过这个Check whether a string contains a substring来检查字符串中是否存在子字符串,现在我的情况略有不同
我有一个像
这样的字符串 /home/me/Desktop/MyWork/systemfile/directory/systemfile64.elf
,
最后这可能是systemfile32.elf
或systemfile16.elf
,所以在我的perl脚本中,我需要检查此字符串是否包含格式为systemfile * .elf的子字符串。
我怎样才能在perl中实现这个目标?
我打算这样做
if(index($mainstring, _serach_for_pattern_systemfile*.elf_ ) ~= -1) {
say" Found the string";
}
答案 0 :(得分:3)
您可以使用模式匹配
if ($string =~ /systemfile\d\d\.elf$/){
# DoSomething
}
\d
代表一个数字(0-9)
$
代表字符串
答案 1 :(得分:1)
好
if( $mainstring =~ m'/systemfile(16|32)\.elf$' ) {
say" Found the string";
}
完成这项工作。
您的信息:
$string =~ m' ... '
与
相同$string =~ / ... /
根据给定的正则表达式检查字符串。这是Perl语言最有用的功能之一。
http://perldoc.perl.org/perlre.html
的更多信息(我确实使用了m''语法来提高可读性,因为正则表达式中存在另一个' /'字符。我也可以写/\/systemfile\d+\.elf$/
答案 2 :(得分:0)
use strict;
use warnings;
my $string = 'systemfile16.elf';
if ($string =~ /^systemfile.*\.elf$/) {
print "Found string $string";
} else {
print "String not found";
如果你有一个设置目录,将匹配systemfile'anythinghere'elf。
如果你想搜索整个字符串,包括目录,那么:
my $string = 'c:\\windows\\system\\systemfile16.elf';
if ($string =~ /systemfile.*\.elf$/) {
print "Found string $string";
} else {
print "String not found";
如果你只想匹配2个系统文件,那么2个数字字符.elf然后使用上面提到的其他方法的其他答案。但是如果你想要systemanything.eelf,那么就使用其中之一。
答案 3 :(得分:0)
if ($string =~ /systemfile.*\.elf/) {
# Do something with the string.
}
这应该只匹配你寻找的字符串(假设每次都有一个给定的字符串存储在$string
中)。在大括号内你应该写下你的逻辑。
.
代表“任何角色”,*
代表“你看到最后一个角色的次数”。所以,.*
意味着“你看到任何角色”。如果您知道字符串将以此模式结束,那么在模式的末尾添加$
以标记字符串应以此结尾更安全:
$string =~ /systemfile.*\.elf$/
请不要忘记chomp $string
以避免任何可能会破坏您所需输出的换行符。