我希望做在Perl的2步正則表達式查找,我的文字,看起來像這樣:2步正則表達式在Perl中
here is some text 9337 more text AA 2214 and some 1190 more BB stuff 8790 words
我也有一個具有以下值哈希:
%my_hash = (9337 => 'AA', 2214 => 'BB', 8790 => 'CC');
這就是我需要做的:
- 查找數
- 中查找文本代碼使用
my_hash
- 檢查是否出現內確定數量爲50個字符的文本代碼的數量,而如果真打印結果
所以我要找的輸出是:
Found 9337, matches 'AA'
Found 2214, matches 'BB'
Found 1190, no matches
Found 8790, no matches
這是我到目前爲止有:
while ($text =~ /(\d+)(.{1,50})/g) {
$num = $1;
$text_after_num = $2;
$search_for = $my_hash{$num};
if ($text_after_num =~ /($search_for)/) {
print "Found $num, matches $search_for\n";
}
else {
print "Found $num, no matches\n";
}
這類作品的,不同之處在於只正確匹配是9337;代碼與2214不匹配。我認爲原因在於9337上的正則表達式匹配在第二步匹配的數字之後包含50個字符,然後當正則表達式引擎再次啓動時,它將從2214.有沒有簡單的方法來解決這個問題?我認爲\G
修飾符可以幫助我,但我不太明白。
任何建議或幫助將是偉大的。
非常感謝Erik。我的數據中還有一個我沒有用我的例子捕捉到的皺紋。假設'AA'出現在2214之後 - 你的解決方案將不起作用,對吧?你看到如何做到這一點?再次感謝。 – itzy
你的意思是直接在2214之後2214AA –
可能是這樣,或者2214之後的任何地方,但是在9337的50個字符之內。 – itzy