看板 Perl 關於我們 聯絡資訊
大家好我是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.*)/ 我想可能是我誤解某些符號的意思,想請教問題出在哪裡呢? 謝謝大家 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 111.248.19.195
scwg:因為 perlre 預設是「貪心」的, 也就是第一個 \s\d.* 會盡可 09/29 01:26
scwg:能 match 最多字元. 於是把 " 1.0 1.5" 都吃掉了, 然後括號對 09/29 01:28
scwg:到第三個數字, \s 對到換行, .* 不用對到任何東西. 09/29 01:28
scwg:建議你用更精確的 pattern, 如 (?:\d|\.)+ 而不是 \d.* 09/29 01:33
SmileU:原來如此,我以為.*不會抓到空白的~非常謝謝你的回覆:) 09/29 10:01
CindyLinz:預設情況 . 會忽略的是換行歐~~ 09/29 16:08
xatier:有看過 perldoc 的 retut 嗎? 10/07 19:35