使用perl搜索字符串中的特定子字符串模式

时间:2016-10-25 08:32:27

标签: string perl search perl-module

我是perl的新手,我通过这个Check whether a string contains a substring来检查字符串中是否存在子字符串,现在我的情况略有不同

我有一个像

这样的字符串

/home/me/Desktop/MyWork/systemfile/directory/systemfile64.elf

最后这可能是systemfile32.elfsystemfile16.elf,所以在我的perl脚本中,我需要检查此字符串是否包含格式为systemfile * .elf的子字符串。 我怎样才能在perl中实现这个目标?

我打算这样做

if(index($mainstring, _serach_for_pattern_systemfile*.elf_ ) ~= -1) {
    say" Found the string";
}

4 个答案:

答案 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以避免任何可能会破坏您所需输出的换行符。