[問題] 正規表示法處理問題

作者: SmileU (SmileU)   2013-09-29 01:23:31
大家好我是perl的新手,有個正規表示法的問題想請教~
現有一字串及三個數,以空白分隔,希望抓出第二個數,如下例希望抓出 1.5
hi_10_test 1.0 1.5 2.5
用以下程式碼可以正確找到 $1=1.5
/_10.*\s\d.*\s(\d.*)\s\d.*/
但若寫成這樣時卻會抓到最後一個數字,$1=2.5
/_10.*\s\d.*\s(\d.*)\s.*/
/_10.*\s\d.*\s(\d.*)/
我想可能是我誤解某些符號的意思,想請教問題出在哪裡呢?
謝謝大家
作者: xatier (一切重來就好了...)   0000-00-00 00:00:00
有看過 perldoc 的 retut 嗎?
作者: scwg ( )   2013-09-29 01:26:00
因為 perlre 預設是「貪心」的, 也就是第一個 \s\d.* 會盡可能 match 最多字元. 於是把 " 1.0 1.5" 都吃掉了, 然後括號對到第三個數字, \s 對到換行, .* 不用對到任何東西.建議你用更精確的 pattern, 如 (?:\d|\.)+ 而不是 \d.*
作者: SmileU (SmileU)   2013-09-29 10:01:00
原來如此,我以為.*不會抓到空白的~非常謝謝你的回覆:)
作者: CindyLinz (Cindy Wang)   2013-09-29 16:08:00
預設情況 . 會忽略的是換行歐~~

Links booklink

Contact Us: admin [ a t ] ucptt.com