- 论坛徽章:
- 0
|
本帖最后由 bzdghdn 于 2010-11-26 13:10 编辑
小弟想写一个正则表达式检测一个字符串中是否不含有换行符,我觉的表达式"^[^\n]+$"表示字符串从开始到结束由一个或多个非换行符组成,所以- #!/usr/bin/perl
- my %string = ("abc\n"=>'abc\n',"\nabc"=>'\nabc',"a\nbc"=>'a\nbc');
- #换行符在最后,换行符在最前,换行符在中间
- for(keys %string)
- {
- if (/^[^\n]+$/)
- {
- print $string{$_},' match ^[^\n]+$',"\n";
- }
- else{
- print $string{$_},' not match ^[^\n]+$',"\n";
- }
- }
复制代码 运行结果- a\nbc not match ^[^\n]+$
- \nabc not match ^[^\n]+$
- abc\n match ^[^\n]+$
复制代码 从上面程序看到如果换行符在最末的时候,正则表达式^[^\n]+$能够匹配"abc\n"。这点我想不通,请高手指点。
因为如果\n换成其它字符的时候,好像都不能匹配,比如- #!/usr/bin/perl
- my %string = ("abc\r"=>'abc\r',"\rabc"=>'\rabc',"a\rbc"=>'a\rbc');
- for(keys %string)
- {
- if (/^[^\r]+$/)
- {
- print $string{$_},' match ^[^\r]+$',"\n";
- }
- else{
- print $string{$_},' not match ^[^\r]+$',"\n";
- }
- }
复制代码 结果- a\rbc not match ^[^\r]+$
- abc\r not match ^[^\r]+$
- \rabc not match ^[^\r]+$
复制代码 是不是因为换行符有什么特殊性? |
|