Perl m运算符问题

use*_*858 0 perl

为什么这段代码打印51而不是26?我正试图提取"价值观".这就是我想要的(大胆的):<option value =" Andaman&Nicobar "> Andaman&Nicobar </ option>

根据定义m在列表上下文中使用g运算符应该在parantheses中返回模式?

my $firstpage=<<'EOF';
 <option value="Andaman & Nicobar">Andaman & Nicobar</option>
            <option value="Andhra Pradesh">Andhra Pradesh</option>
            <option value="Assam">Assam</option>
            <option value="Bihar">Bihar</option>
            <option value="Calcutta Telecom District">Calcutta Telecom District</option>
            <option value="Chennai Telecom District">Chennai Telecom District</option>
            <option value="Chhattisgarh">Chhattisgarh</option>
            <option value="Gujarat">Gujarat</option>
            <option value="Haryana">Haryana</option>
            <option value="Himachal Pradesh">Himachal Pradesh</option>
            <option value="Jammu & Kashmir">Jammu & Kashmir</option>
            <option value="Jharkhand">Jharkhand</option>
            <option value="Karnataka">Karnataka</option>
            <option value="Kerala">Kerala</option>
            <option value="Madhya Pradesh">Madhya Pradesh</option>
            <option value="Maharashtra">Maharashtra</option>
            <option value="North East I">North East I</option>
            <option value="North East II">North East II</option>
            <option value="Orissa">Orissa</option>
            <option value="Punjab">Punjab</option>
            <option value="Rajasthan">Rajasthan</option>
            <option value="Tamilnadu">Tamilnadu</option>
            <option value="UP East">UP East</option>
            <option value="UP West">UP West</option>
            <option value="Uttaranchal">Uttaranchal</option>
            <option value="West Bengal">West Bengal</option>
EOF

my @cities=$firstpage=~m{(?<=")([^"]*)(?=")}gs;

print scalar @cities;
Run Code Online (Sandbox Code Playgroud)

yst*_*sth 7

每个/ g匹配从前一个停止的地方开始,但由于你使用零宽度断言,你实际上并没有消耗".所以

">Andaman & Nicobar</option>
        <option value="
Run Code Online (Sandbox Code Playgroud)

被认为也是一场比赛.

做:

my @cities = $firstpage =~ m/"([^"]*)"/gs;
Run Code Online (Sandbox Code Playgroud)

代替.请注意,如果存在捕获括号,则只有在列表上下文中成功时m // g才会返回这些内容.