[D]在Perl里,=~和||=算式是什么意思?

uranas 2012-03-12 01:32:50
$path1 =~ m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;

$dispatch1 ||= 'index';

求解释以上两算式的意思或给出参考資料,书里没找到。
--------------------
Double行动:
原帖分数:40
加分:40




...全文
1215 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
fibbery 2012-03-13
  • 打赏
  • 举报
回复
my $line="/abc/def/ghi.pl";
my @array=$line=~m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;
print("@array\n");


应该是用来拆分路径用的。
?:/\w+表示匹配一个"/"+单词,但由于前方有?:表示该匹配不被存储为匹配变量($n等),学名叫创建反向引用。
^((?:/\w+)*/)就表示匹配0个或者多个以/word开头的字符串,二次括号导致匹配的整体被反向引用,即创建匹配的变量,此处为$1。

接着,(\w*)匹配0个或者一个单词,保存为$2;
最后,匹配一个.和单词并且是结尾($).

例子代码执行后,显示:
/abc/def/ ghi .pl
liujunyu 2012-03-13
  • 打赏
  • 举报
回复
1.
?:是Conditional operator
$path1 =~ m|^((?:/\w+)*/)(\w*)(\.\w+)?$|;
比如它可以匹配:my $path1 = "Jack;abc.list";

2.
$dispatch1 ||= 'index'; 相当于下面的含义:
if ( not ($dispatch1) ) {
$dispatch1 = 'index';
}
worldlight 2012-03-13
  • 打赏
  • 举报
回复
关于第二个表达式。后面有*的就可有无,先不必看它,主要分析开始的匹配,由里向外分析,*前面的可以暂时不管,因为*前面的匹配时可有可无,所以里面的括号可不管,*后面是个/,外面的括号有个开头标符^,表明必须是以/开头的,?前面的也可以先不管,理由同*,所以最简单的结果就是匹配/.再看/前面*匹配的括号里是字符(\w+),要不没有要不必须有一个及以上字符,?:在这不用管,是跳过存储匹配模式的,后面的就简单了,0个及以上字符,以0个及一个.接一个以上字符结尾。
uranas 2012-03-12
  • 打赏
  • 举报
回复
飞老大,多谢了。

能不能再帮解释一下 m|^((?:/\w+)*/)(\w*)(\.\w+)?$| 的含义?

买了一本正则表达式的书,都没这么复杂的,
你给点建议,该怎么学正则表达式?
fibbery 2012-03-12
  • 打赏
  • 举报
回复
=~是正则匹配运算符,当左操作数符合右操作数的正则表达式时返回非false值(含义比较广泛)。
具体你可以接收一下返回值,看看。

第二个是或等赋值运算符。表示,如果$dispatch1为非false,那么$dispatch1还是$dispatch1,否则,$dispatch1被赋值为index。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧