php用正则写一个UBB文本编辑器

我们来看一下UBB编辑器。这是网站当中经常用到的文本处理技术。因为使用UBB文件编辑器,我指定的格式才能存在。我不指定的格式,用户是无法在网站中展现的。

我们来看看效果:

<?php
$string='[b]为你写诗[/b]
[i]为你做不可能事[/i]
[u]哎呀,哥不是写情诗[/u]
[color=Red]哥是在说歌词[/color]
[size=7]吴克群[/size]
[qq]123123123[/qq]';

//匹配UBB字符
$pattern=array(
    '/\[b\](.*)\[\/b\]/i',
    '/\[i\](.*)\[\/i\]/iU',
    '/\[u\](.*?)\[\/u\]/i',
    '/\[color=(.*?)\](.*?)\[\/color\]/',
    '/\[size=(\d)\](.*?)\[\/size\]/',
    '/\[qq\](\d{5,12})\[\/qq\]/',

    );

//需要替换的UBB字符
$replace=array(
    '<b>\\1</b><br />',
    '<i>\\1</i><br />',
    '<u>\\1</u><br />',
    '<font color="\\1">\\2</font><br />',
    '<font size="\\1">\\2</font><br />',
    '<a href="http://wpa.qq.com/msgrd?V=1&Uin=\\1&amp;Site=[Discuz!]&amp;Menu=yes"
 target="_blank"><img src="http://wpa.qq.com/pa?p=1:\\1:1" border="0"></a>',
    );

//使用正则匹配$string,将$string当中的值变为$replace的效果
$ubb=preg_replace($pattern,$replace,$string);

echo $ubb;
?>

实现的更高级,你可以让用户传过来的是form表单中的结果,让用户传值过来。

你转换输出成UBB格式。

下一章节中我们学习了文件系统的知识,再跟大家讲解更加有趣的:网页采集器。


继续学习
||
<?php $string='[b]为你写诗[/b] [i]为你做不可能事[/i] [u]哎呀,哥不是写情诗[/u] [color=Red]哥是在说歌词[/color] [size=7]吴克群[/size] [qq]123123123[/qq]'; //匹配UBB字符 $pattern=array( '/\[b\](.*)\[\/b\]/i', '/\[i\](.*)\[\/i\]/iU', '/\[u\](.*?)\[\/u\]/i', '/\[color=(.*?)\](.*?)\[\/color\]/', '/\[size=(\d)\](.*?)\[\/size\]/', '/\[qq\](\d{5,12})\[\/qq\]/', ); //需要替换的UBB字符 $replace=array( '<b>\\1</b><br />', '<i>\\1</i><br />', '<u>\\1</u><br />', '<font color="\\1">\\2</font><br />', '<font size="\\1">\\2</font><br />', '<a href="http://wpa.qq.com/msgrd?V=1&Uin=\\1&Site=[Discuz!]&Menu=yes" target="_blank"><img src="http://wpa.qq.com/pa?p=1:\\1:1" border="0"></a>', ); //使用正则匹配$string,将$string当中的值变为$replace的效果 $ubb=preg_replace($pattern,$replace,$string); echo $ubb; ?>
提交重置代码
章节
笔记
提问
课件
反馈
捐赠

php入门教程之一周学会PHP

  • 推荐课程
  • 评论
  • 问答
  • 笔记
  • 课件下载
Love WHO WHO(・ิϖ・ิ)っ

Love WHO WHO(・ิϖ・ิ)っ

说实话,靠前面几节正则,太难背了,不如结合实例一个一个讲解,本来准备看看视频能给详细讲解一下,结果3分钟一带而过,什么都没讲。。。。。。。。。。

3年前    添加回复 3

回复
MR.y

MR.y

我就想知道,有人真的一星期看完了这一整本吗? 我表示从开始一直看到这里,已经花费了接近3周了.

3年前    添加回复 2

回复
旧歌

旧歌

提醒大家,正则如果真正想要精通没个月个把月是搞不定的,这些东西也不要去死记,对新手来说反而对自己失去信心。正则表达式只要会用就可以了,日常工作中如果要用的,去百度一下就会有现成的给你用。我是做java的这一章节我粗略的过了一下

2年前    添加回复 0

回复
phpcn_u43670

phpcn_u43670

大佬,666,写完这段代码直接把正则背会了。

3年前    添加回复 0

回复
KONEKO

KONEKO

。。。这是靠猜吗

4年前    添加回复 0

回复
王昊

王昊

真心看不懂,啥啊这是

4年前    添加回复 0

回复
勾子

勾子

表示看不懂

4年前    添加回复 0

回复

preg_repalce()怎么使用反斜线?

[最新 寻觅 beyond 的回答]直接使用单引号,何必这么麻烦

时间:3年前

为什么\\1是继承了(.*)而不是代替了???

[最新   的回答]难道只有replacement中可以包含后向引用\\n这个解释吗?也就是说固定的?

时间:3年前

()中的匹配项将放到数组中,问题是$1和\\1有什么不同?

[最新   的回答]如果说区别的话就是:preg_replace() 不知道我们想表达的是\\11还是\\1 1(第二个1是字符串1)。所以用${1}1可以让preg_replace()知道第一个1是反向引用,第二个1只是紧跟着反向引用后面原文的1。

时间:3年前

罗金尧

罗金尧

反向引用 对一个正则表达式模式或部分模式 两边添加圆括号 将导致相关 匹配存储到一个临时缓冲区 中,所捕获的每个子匹配都按照在正则表达式模式中从左到右出现的顺序存储。缓冲区编号从 1 开始,最多可存储 99 个捕获的子表达式。每个缓冲区都可以使用 '\n' 访问,其中 n 为一个标识特定缓冲区的一位或两位十进制数。

1年前 0

筱笋尖

筱笋尖

\1 表示的是第一个匹配的内容

2年前 0

独药

独药

<?php $string='[b]为你写诗[/b] [i]为你做不可能事[/i] [u]哎呀,哥不是写情诗[/u] [color=Red]哥是在说歌词[/color] [size=7]吴克群[/size] [qq]123123123[/qq]'; //匹配UBB字符 $pattern=array( '/\[b\](.*)\[\/b\]/i', '/\[i\](.*)\[\/i\]/iU', '/\[u\](.*?)\[\/u\]/i', '/\[color=(.*?)\](.*?)\[\/color\]/', '/\[size=(\d)\](.*?)\[\/size\]/', '/\[qq\](\d{5,12})\[\/qq\]/', ); //需要替换的UBB字符 $replace=array( '<b>\\1</b><br />', '<i>\\1</i><br />', '<u>\\1</u><br />', '<font color="\\1">\\2</font><br />', '<font size="\\1">\\2</font><br />', '<a href="http://wpa.qq.com/msgrd?V=1&Uin=\\1&amp;Site=[Discuz!]&amp;Menu=yes" target="_blank"><img src="http://wpa.qq.com/pa?p=1:\\1:1" border="0"></a>', ); //使用正则匹配$string,将$string当中的值变为$replace的效果 $ubb=preg_replace($pattern,$replace,$string); echo $ubb; ?>

3年前 0

争渡

争渡

()中的匹配项将放到数组中,问题是$1和\\1有什么不同?

3年前 0

课件暂不提供下载,工作人员正在整理中,后期请多关注该课程~