LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1082|回复: 7

一个小问题

[复制链接]
发表于 2004-2-13 13:23:34 | 显示全部楼层 |阅读模式
[PHP]$string = "This 14.34";
$string =~ /-?(\d+)\.?(\d+)/;
print "$1\n";
echo "$2\n";
echo "$&\n";[/PHP]


my question is : what does "-" and "?" do here?
发表于 2004-2-13 13:47:43 | 显示全部楼层
在perl里,没有echo这个函数~
 楼主| 发表于 2004-2-13 15:20:49 | 显示全部楼层
[PHP]    $string = "This 14.34";
    $string =~ /-?(d+).?(d+)/;
    print "$1\n";
    print "$2\n";
    print "$&\n";[/PHP]

I'm sorry, i typed wrongly. i am new in learning perl.  above is the right one.
still that question, i don't understand the function of "-?" and "?" above.
can any one help me? thanks!
发表于 2004-2-13 15:36:22 | 显示全部楼层
关于perl中正则表达式,见:
http://www.linuxsir.cn/bbs/showthread.php?threadid=62745
http://www.linuxsir.cn/bbs/showthread.php?threadid=990
$1,$2,$n表示把匹配的变量保存在变量中,相当于sed的模式记忆\(.\)
$&是一个perl的特殊变量,他匹配所有的匹配部分~与之相关的还有&`和$'
发表于 2004-2-13 20:54:52 | 显示全部楼层
没什么意思。

/-?(d+).?(d+)/;

- ? 匹配0个或1个 - (数学里叫负号)
(\d+) 一个或一个以上数字(0--9)
.? 匹配0个或1个句点(数学里叫小数点)

你得(\d+)可能是写错了。匹配数字应是 \d 不是 d.

在规则表达式里不要管多复杂。只要没有括号。就一个一个分解来。很容易得。

? 0个或者1个他前面得原子。所以他前面得肯定是原子。不用猜是什么。
就是匹配他前面得字符。

整个规则表达可以匹配任意数字组合 可以包括负号或小数位。

javalee: 你好象没有理解楼主得意思哦。
发表于 2004-2-14 03:23:57 | 显示全部楼层
我的书上怎么没有-号的介绍:ask
发表于 2004-2-14 11:21:50 | 显示全部楼层
负号。好象不用单独介绍吧。

好象很早就学过的吧。

比如  -13.7;  -235; -786578; 就是比0小
发表于 2004-2-14 12:10:57 | 显示全部楼层
找到一个例子~~:
检验数字表示合法性
if ($number =~ /^-?d+$|^-?0[xX][da-fa-F]+$/) {
print ("$number is a legal integer.n");
} else {
print ("$number is not a legal integer.n");
}
其中 ^-?d+$ 匹配十进制数字,^-?0[xX][da-fa-F]+$ 匹配十六进制数字。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表