免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: g84ch
打印 上一主题 下一主题

请教高手,一个perl中的正则表达式的问题? [复制链接]

论坛徽章:
0
11 [报告]
发表于 2010-08-12 11:14 |只看该作者
本帖最后由 黑色阳光_cu 于 2010-08-12 19:58 编辑
感谢ls各位的解答,谢谢各位了。。。我还想问一个正则表达式的问题,我有一个变量$a的字符串(保存的是文件名 ...
g84ch 发表于 2010-08-12 11:11



   
$b =~ /\Q$a\E/;
index($b, $a) != -1;

论坛徽章:
0
12 [报告]
发表于 2010-08-12 13:23 |只看该作者
是,有些字符对正则表达式有特殊的含义,称为原字符, 共有12个

\ | ( ) [ { ? . + ^ $ *

试着用下面的函数先对变量a作处理,应该就可以了


  1. sub regular_exp {

  2.     $pat = shift;

  3.     $pat =~ s#\\#\\\\#g;
  4.     $pat =~ s#\|#\\|#g;
  5.     $pat =~ s#\(#\\(#g;
  6.     $pat =~ s#\)#\\)#g;
  7.     $pat =~ s#\[#\\[#g;
  8.     $pat =~ s#\{#\\{#g;
  9.     $pat =~ s#\^#\\^#g;
  10.     $pat =~ s#\$#\\\$#g;
  11.     $pat =~ s#\*#\\*#g;
  12.     $pat =~ s#\+#\\+#g;
  13.     $pat =~ s#\?#\\?#g;
  14.     $pat =~ s#\.#\\.#g;

  15.     return $pat

  16. }

  17. $a = regular_exp ( $a );

  18. $b =~ /$a/;

复制代码

论坛徽章:
0
13 [报告]
发表于 2010-08-12 14:14 |只看该作者
当然,你也可以用正则表达式里的消元断言, 消元断言会告诉正则表达式的解释器,原字符只代表本身没有特殊含义,直到\E


  1. $b =~ /\Q$a\E/;

复制代码

论坛徽章:
0
14 [报告]
发表于 2010-08-12 14:42 |只看该作者
我觉得考虑下 /usr/java/jdk1.6.10_10/这种格式的表达,所以使用basename在这里比正则要舒服些

论坛徽章:
0
15 [报告]
发表于 2010-08-12 15:03 |只看该作者
当然,你也可以用正则表达式里的消元断言, 消元断言会告诉正则表达式的解释器,原字符只代表本身没有特殊含义 ...
weikun750 发表于 2010-08-12 14:14



  谢谢,这个方法挺方便。。。

论坛徽章:
0
16 [报告]
发表于 2010-08-15 23:05 |只看该作者
/\/+([^\/]+)$/  自己留个记录而已

论坛徽章:
0
17 [报告]
发表于 2010-08-16 13:02 |只看该作者
回复 11# 黑色阳光_cu


    这个方便哇
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP