我已經能夠找到與此類似的但不相同的問題。如何在由未知字符分隔的同一行中多次匹配一個正則表達式模式?Perl,在由未知字符分隔的同一行中多次匹配一個模式
例如,假設我想匹配HEY模式。我願意承認所有以下內容:
HEY
嘿,嘿
HEYxjfkdsjfkajHEY
所以我算5個HEYs那裏。因此,這裏是我的計劃,該計劃適用於一切,但最後一個:
open (FH, $ARGV[0]);
while(<FH>)
{
foreach $w (split)
{
if ($w =~ m/HEY/g)
{
$count++;
}
}
}
所以我的問題是我怎麼替換foreach循環,使我能夠識別出未知的配置怪異字符(分隔模式,如所示上面的例子)?
編輯:
感謝迄今偉大的響應。我只是意識到我還需要其他的東西,我在下面發表評論。
雖然有一個問題:是否有任何方法來保存匹配的術語呢?所以,像我的情況,有沒有什麼辦法來引用$ W(比方說,如果正則表達式是比較複雜的,我想它出現的次數存儲在一個散)
所以,如果我是匹配真正的正則表達式(稱爲字母數字字符序列)並希望將其保存在散列表中。
嘿,感謝您的幫助。我實際上不得不修改你的東西,以兩種方式工作:首先,我不能爲你的解決方案讓第一部分工作,所以我使用了Wes的方法(兩個while循環)。另外,我只是想指出,在整個正則表達式中,包含一羣組的正則表達式需要(),這樣您就不會得到只包含所需總數碎片的哈希值。雖然謝謝! – varatis 2012-02-06 06:50:15
你的朋友在處理多個分組時是使用問號冒號'(?:)'修改的非捕獲組。 – masaers 2012-02-08 08:05:30