作者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