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

看板Perl作者 (SmileU)時間11年前 (2013/09/29 01:23), 編輯推噓0(007)
留言7則, 4人參與, 最新討論串1/1
大家好我是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

09/29 01:26, , 1F
因為 perlre 預設是「貪心」的, 也就是第一個 \s\d.* 會盡可
09/29 01:26, 1F

09/29 01:28, , 2F
能 match 最多字元. 於是把 " 1.0 1.5" 都吃掉了, 然後括號對
09/29 01:28, 2F

09/29 01:28, , 3F
到第三個數字, \s 對到換行, .* 不用對到任何東西.
09/29 01:28, 3F

09/29 01:33, , 4F
建議你用更精確的 pattern, 如 (?:\d|\.)+ 而不是 \d.*
09/29 01:33, 4F

09/29 10:01, , 5F
原來如此,我以為.*不會抓到空白的~非常謝謝你的回覆:)
09/29 10:01, 5F

09/29 16:08, , 6F
預設情況 . 會忽略的是換行歐~~
09/29 16:08, 6F

10/07 19:35, , 7F
有看過 perldoc 的 retut 嗎?
10/07 19:35, 7F
文章代碼(AID): #1IHn2Lel (Perl)
文章代碼(AID): #1IHn2Lel (Perl)