[问题] 正规表示法处理问题

楼主: 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