Regex Perl正则表达式字符串的开头

Regex Perl正则表达式字符串的开头,regex,perl,match,Regex,Perl,Match,您好,我有一个文本,如下所示: 39349562486245 1002978;ITM;39349;ITALIEN MOBIL;5;0;414;177 假设我有一个电话号码,看起来像这样: 39349562486245 1002978;ITM;39349;ITALIEN MOBIL;5;0;414;177 文件中的一个条目如下所示: 39349562486245 1002978;ITM;39349;ITALIEN MOBIL;5;0;414;177 现在,数字的开头与下面的数字匹

您好,我有一个文本,如下所示:

39349562486245
1002978;ITM;39349;ITALIEN  MOBIL;5;0;414;177
假设我有一个电话号码,看起来像这样:

39349562486245
1002978;ITM;39349;ITALIEN  MOBIL;5;0;414;177
文件中的一个条目如下所示:

39349562486245
1002978;ITM;39349;ITALIEN  MOBIL;5;0;414;177
现在,数字的开头与下面的数字匹配,我如何在Perl中检查是否以该数字开头。所以我到目前为止,但它确实起了作用:

zeile[5]是电话号码

open( DATEIMAIN, "<$dateimainc" ) || die("Datei $dateimainc kann nicht geöffnet werden!");
    my @zeilenMAIN = <DATEIMAIN>;   


    for(my $lineNMAIN = 1; $lineNMAIN < @zeilenMAIN; $lineNMAIN++)
        {
            @zeileMAINC =  split( /;/, $zeilenMAIN[$lineNMAIN] );

            if ($zeile[5] =~ /^$zeileMAINC[2]/)
            {
                $displaynameB = $zeileMAINC[3];
                last;
            }
        }

open(DATEIMAIN),构建字符串前缀的散列,然后使用:

use warnings;
use strict;

#Load the lines of input data into a hash.
my %prefixes = map { chomp; split ';' } <DATA>;

my @numbers = ('39349562486245','123456789');

#Create a single regex like /^(12345|48956|...)/ for efficiency.
my $regex = '^(' . join('|',map{quotemeta} keys %prefixes) . ')';

for my $num (@numbers)
{
    print "$num is $prefixes{$1}\n" if ($num =~ /$regex/);  
}

__DATA__
39349;ITALIEN
12345;FOO
使用警告;
严格使用;
#将输入数据行加载到哈希中。
my%前缀=map{chomp;split';'};
我的@numbers=('39349562486245','123456789');
#为了提高效率,创建一个类似于/^(12345 | 48956 |…)/的正则表达式。
我的$regex='^('.join('|',map{quotemeta}键%前缀)。';
对于我的$num(@numes)
{
如果($num=~/$regex/),则打印“$num是$prefixes{$1}\n”;
}
__资料__
39349;意大利
12345;富

也许您应该提供一些输入来说明您的问题。此代码正常工作,因此我们确实无法帮助您。我猜问题在于1)您没有使用
警告
,2)当您提取
zeileMAINC
编号时,它会失败,因此您正在匹配空字符串或未定义。如果您打开了警告,则可能会出现错误,例如
使用未初始化值$zeileMAINC[2]在regexp编译中…
若要调试,请使用Data::Dumper模块打印数据以查看它是什么。我正在使用警告,并且我还尝试打印zeileMAINC的值。这也没有问题。然后显示一些输入和代码来演示您的问题。此代码按原样工作。您仍然没有提供演示问题的代码em.假设
$zeile[5]
包含您的电话号码,它应该匹配,并且只匹配一次(因为
最后一个
语句).有什么问题吗?我不能这样做,因为我有一个很大的列表,它的格式与上面的不一样,我必须检查每个条目。你对每个条目都有解决方案吗?@alexj,你说的每个条目是什么意思?这在功能上与你问题中的代码的意图相同。