2013-07-17 30 views
-1

的Perl接受:爲什麼添加字符類到正則表達式的末尾無法匹配十六進制數?

my @resultado = $texto =~ /[^g-zG-z]$RE{num}{real}{-base=>16}/g 

但不接受:

my @resultado = $texto =~ /[^g-zG-z]$RE{num}{real}{-base=>16}[^g-zG-z]/g 

我只是在末尾添加[^g-zG-z];在開始時它可以工作,但不會結束。爲什麼? 我想打印十六進制數字,但是,例如,在有'call'這樣的詞的情況下,它不應該說'ca'是一個十六進制數字。

+1

工作?什麼是投入,預期產出和實際產出? – Aprillion

+2

歡迎來到Stack Overflow。請儘快閱讀[關於]頁面。如果您提供SSCCE([簡短,獨立,正確的示例](http://sscce.org/)),將會有很大幫助。請注意,您的正則表達式設計將在'= 123 ='中包含'='符號作爲十六進制值的一部分。你在使用['Regexp :: Common'](http://search.cpan.org/perldoc?Regexp%3A%3ACommon)嗎?如果是這樣,那麼說(但是你的SSCCE當然會讓這個問題沒有意義)。 –

+0

是的,對不起,我的英語水平很糟糕,我開始使用編程和互聯網,對不起。 – user2592255

回答

5

字符分類[^g-zG-z]與不在範圍g到z中的單個字符相匹配。這不是你想要匹配一個十六進制數字。例如,如果您的十六進制數字出現在字符串的末尾(即沒有任何內容),則匹配將失敗。

您沒有提供樣本數據。一個模式,如

my @resultado = $texto =~ /\b([0-9A-Fa-f]+)\b/g; 

可能會給你你想要的。 \b匹配詞b oundary,而且限制了十六進制數字到單個內發生「字」。

Regexp::Common而言,當它沒有上面的行表示爲

my @resultado = $texto =~ /\b($RE{num}{int}{-base => 16})\b/g; 
+0

對不起,我的英語和我的壞問題描述我只是一個國外的孩子。我必須使用模塊Regexp :: Common,所以我必須用$ RE {num} {real} { - base => 16}類似的方法解決此問題 – user2592255

+0

@ user2592255查看更新的答案。 –

+0

是的,它almosts作品,我有這個輸入的.txt: #numeros enteros #numeros decimales 25.0 12.75 #numero六 ABC770 1010A #NO numeros 堂吉訶德從 俄羅斯與愛 和輸出是幾乎好,問題是數字12.0它需要12和0作爲結果,結果必須是12.0不是12和0 – user2592255

相關問題