正则表达式子模式使用函数(1 位领导批示)

原问题地址: http://bbs.blueidea.com/thread-2944055-1-1.html

比较正确的解决方法:

1
2
3
4
5
<?php
$str="[thunder]ftp://3gset.cn:3gset@down.3gset.cn/谢谢你的温柔-S.H.E_飞轮海.mv.320x240.avi[/thunder]";
$str = preg_replace("/\[thunder\](.[^\[]*)\[\/thunder\]/ie","'<a href=\"thunder://'.base64_encode('\\1').'\">\\1</a>'", $str);
echo htmlspecialchars($str);
?>

这段代码的重点是使用了修饰符 e
正则表达式的修饰符 e 是这么解释的:
如果设置这个修饰符, preg_replace() 将在替换值里进行正常的涉及到 的替换, 等同于在 PHP 代码里面一样, 然后用于替换搜索到的字符串.

全文阅读 »

Perl学习之使用正则表达式处理文件(0 位领导批示)

可以通过正则表达式来改变文本。到目前为止,只介绍过怎么匹配模式。现在,我们将向你演示怎样通过模式来改变字符串中相应地部分。

一、使用s///进行替换

如果将 m// 这个模式匹配看作同文字处理器的 查询(search) 类似的功能,那Perl中 s/// 操作的则类似于 查询并替换(search and replace) 。它将替换变量中模式所匹配上的部分。


$_ ="我喜欢打球";
s/很喜欢/不喜欢/; #很喜欢被不喜欢替换掉
print "$_\n";

如果没有匹配上,则什么也不会发生,此变量也不会有任何更改。

s///会返回一个Boolean 值。如果成功替换则返回true;否则返回false。

1.使用 /g 进行全局替换

在前面的例子中你可能已经注意到,s///值进行一次替换,无论是否还有地方还能匹配上。当然,这只是默认的行为。修饰符 /g 要求s///将不相重叠的所有匹配上的部分都进行替换。


$_ = "哇,好大的棉花糖哇!";
s/哇/哟/g;
print "$_";

全局替换的一个常用地方是将多个空格用单个空格替换掉。

2.不同的分隔符

如同m//和qw//一样,我们也可以改变s///的分隔符。但这里使用了3个分隔符,因此有些不同。
通常的(非配对的)字符,由于没有左字符和右字符的区别,则可以像使用正斜线(/)那样使用。

如果使用的是配对的字符,也就是说其左字符和右字符不的,则必需使用两对:一对存放模式,一对存放替换的字符串。分隔符甚至可以是不同的。

全文阅读 »

Perl学习之正则表达式的应用(0 位领导批示)

一、使用m//匹配

我们曾经将模式放在一对正斜线(//)里面,如/fred/。这是m//(模式匹配)的一种简写。同qw//操作一样,可以使用任何成对的分隔符。
如果使用正斜线(/)作为分隔符,则可以省略掉前面的m。

二、可选的修饰符

有几个修饰符(modifier),通常叫做标记(flag),可以后缀在正则表达式后面来该变其默认的行为。

1.不区分大小写:/i

要创建一个大小写无关的模式,如匹配FRED时,也能匹配上fred, Fred,可以使用修饰符/i。

2.匹配任何字符:/s

默认情况下,点(.)不匹配换行符,这对于 单行中查找 的问题能很好解决。如果你的字符串中有换行符,并希望点(.)能匹配它们,那可以使用/s 这个修饰符。它将模式中点(.)的行为变成同字符类[\d\D]的行为类似:可以匹配任何字符,包括换行符。

3.添加空格:/x

/x 修饰符,允许你在模式中加入任何数量的空白,以方便阅读。

Perl中,注释可以被作为空白,因此使用/x,可以在模式中加上注释。
#号表示后面是注释,如果需要匹配井号,可以使用\#或[#]。注意不要在注释中使用闭分隔符,否则将结束此模式匹配。

4.将可选字符结合起来
如果在一个模式中需使用不止一个修饰符,可以一个接着一个。其顺序是不重要的。

全文阅读 »

Perl学习之正则表达式(0 位领导批示)

Perl有许多区别于其它语言的特性。在所有这些特性中,最重要的一条是对正则表达式的支持。它允许你方便,快捷的处理字符串相关的问题。
正则表达式(regular expressions)是一种特殊语言写成的程序,内嵌于Perl之中。

一、什么是正则表达式

正则表达式,在Perl中通常被称为模式(pattern):某个模板是否匹配某个字符串。由于存在无限的字符串,某个给定的模式将这些字符串分成两类:一类是能匹配的,一类是不能匹配的。这里没有或者,大概,几乎那样的匹配。要么匹配,要么不匹配。

一个模式可以匹配多个字符串:1个,多个,或者无限个。也可能匹配除了1个,多个,或者无限个字符串之外的所有字符串。我们将正则表达式看作一种由简单语言实现的程序,这种语言只有一个任务:查找某个字符串,返回匹配上(it matches)或者不匹配(it doesnot match)。

二、使用简单的模式

要匹配某个模式(正则表达式)和$_的关系,可以将模式放在正斜线(//)之间


$_ ="hollo world";
if(/o w/){
	print "it matches";
}

模式匹配通常返回true或false,因此经常用在if或while的条件表达式部分。

全文阅读 »

随机显示的10篇日志

评论最多的10篇日志

浏览最多的10篇日志