Chinaunix

标题: 问一个perl模式匹配的问题 [打印本页]

作者: hepower    时间: 2010-11-10 15:34
标题: 问一个perl模式匹配的问题
我的字符串如下格式
FPxxxxdd
xxxx为数字,不一定是4位数,位数是不确定的
dd为非数字,通常为空格,也可能是别的字符,但不是数字
我以前是如下匹配的
$feature_name =~/^FP(.+?) /

但是是根据空格,目前有可能不是空格,请问应该如何写匹配?
谢谢!
作者: liyangole    时间: 2010-11-10 15:58
$feature_name =~ /^FP(?:\d{4,})\D/
作者: hepower    时间: 2010-11-10 17:27
$feature_name =~ /^FP(?:\d{4,})\D/
liyangole 发表于 2010-11-10 15:58



    好像不行阿,
我使用如下:
  1. my $feature_name = "FP321_ddd";
  2. $feature_name =~ /^FP(?:\d{4,})\D/;
  3. print $1;
复制代码
打印不出东西,应该打印出321
作者: hepower    时间: 2010-11-11 15:47
有哪位同学能帮忙看一下吗?
谢谢:wink:
作者: yybmsrs    时间: 2010-11-11 16:00
想要数字?
作者: hepower    时间: 2010-11-11 16:13
是的,从第一个不是数字的地方开始匹配,要前面的数字
作者: jason680    时间: 2010-11-11 16:24
好像不行阿,
我使用如下:打印不出东西,应该打印出321
hepower 发表于 2010-11-10 17:27


三个问题:
1.你要值,不能用 ?:
2. 明明只有三个数, 怎会用 \d{4,}
3. 要用if
  1. my $feature_name = "FP321_ddd";
  2. if($feature_name =~ /^FP(\d+)\D/){
  3.     print $1;
  4. }
复制代码

作者: yybmsrs    时间: 2010-11-11 16:26
  1. my $feature_name = "FP321_ddd";

  2. $feature_name =~ /(\d+)/;

  3. print $1;
复制代码

作者: hepower    时间: 2010-11-11 17:36
三个问题:
1.你要值,不能用 ?:
2. 明明只有三个数, 怎会用 \d{4,}
3. 要用if
jason680 发表于 2010-11-11 16:24


这是上面一个同学给的代码,不是我写的。。。。
作者: 珞水的大叔    时间: 2010-11-11 22:28
回复 9# hepower


    yy 给出的匹配很OK,再配上 jason680 的if格式就基本满足你的需求了
  1. my $feature_name = "FP321_ddd";
  2. if($feature_name =~ /(\d+)/){
  3.     print $1;
  4. }
复制代码

作者: hepower    时间: 2010-11-16 14:51
回复  hepower


    yy 给出的匹配很OK,再配上 jason680 的if格式就基本满足你的需求了
珞水的大叔 发表于 2010-11-11 22:28



    my $feature_name = "FP321_ddd";
if($feature_name =~ /(\d+)/){
    print $1;
}

不行阿,什么也打印不出来阿。
作者: 猪鼻插葱    时间: 2010-11-16 15:01
my $feature_name = "FP321_ddd";
if($feature_name =~ /(\d+)/){
    print $1;
}

不行阿 ...
hepower 发表于 2010-11-16 14:51

我测试了一下  大叔提供的代码完全可用  Fedora 10下结果为321
作者: flw    时间: 2010-11-16 16:23
所以 5.10 和 Perl6 发明了 say,
就是给你们这帮笨人用的。
作者: hepower    时间: 2010-11-16 16:52
我测试了一下  大叔提供的代码完全可用  Fedora 10下结果为321
猪鼻插葱 发表于 2010-11-16 15:01



    我这里不行阿 ,我的环境是Ubuntu9.1,为啥呢~
作者: 猪鼻插葱    时间: 2010-11-16 17:06
所以 5.10 和 Perl6 发明了 say,
就是给你们这帮笨人用的。
flw 发表于 2010-11-16 16:23

额 我在想笨是注定的了 主要是想着怎么先飞
作者: flw    时间: 2010-11-16 17:10
我这里不行阿 ,我的环境是Ubuntu9.1,为啥呢~
hepower 发表于 2010-11-16 16:52



    print $1, "\n";

试试
作者: 黑色阳光_cu    时间: 2010-11-16 18:17
我测试时喜欢warn
作者: hepower    时间: 2010-11-18 16:41
print $1, "\n";

试试
flw 发表于 2010-11-16 17:10



    可以了,谢谢!




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2