作者SmileU (SmileU)
看板Perl
標題[問題] 正規表示法處理問題
時間Sun Sep 29 01:23:31 2013
大家好我是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
1F:→ scwg:因為 perlre 預設是「貪心」的, 也就是第一個 \s\d.* 會盡可 09/29 01:26
2F:→ scwg:能 match 最多字元. 於是把 " 1.0 1.5" 都吃掉了, 然後括號對 09/29 01:28
3F:→ scwg:到第三個數字, \s 對到換行, .* 不用對到任何東西. 09/29 01:28
4F:→ scwg:建議你用更精確的 pattern, 如 (?:\d|\.)+ 而不是 \d.* 09/29 01:33
5F:→ SmileU:原來如此,我以為.*不會抓到空白的~非常謝謝你的回覆:) 09/29 10:01
6F:→ CindyLinz:預設情況 . 會忽略的是換行歐~~ 09/29 16:08
7F:→ xatier:有看過 perldoc 的 retut 嗎? 10/07 19:35