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

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

我们来看看效果:

<?php
$string='[b]为你写诗[/b]
[i]为你做不可能事[/i]
[u]哎呀,哥不是写情诗[/u]
[color=Red]哥是在说歌词[/color]
[size=7]吴克群[/size]
[qq]1378353651[/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格式。

哦耶,成功了!


preg_replace函数的使用

$str = 'April 15, 2003';
$pat = '/(\w+) (\d+), (\d+)/i';
$rep = '${1}1,$3';

preg_match($pat, $str, $res);
var_dump($res);

echo preg_replace($pat, $rep, $str);// April1,2003
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 我可以为你提供一个用C语言编正则表达式解释器的示例程序:#include<stdio.h> #include<string.h>int main(int argc, char *argv[]) { char pattern[100]; char text[100]; int i; printf("输入正则表达式: "); scanf("%s",pattern); printf("输入文本: "); scanf("%s",text); for (i=0; i<strlen(text); i++) { if (strstr(text+i, pattern) == text+i) printf("找到匹配!\n"); } return 0; } ### 回答2: 正则表达式是用来描述、匹配字符模式的一种工具。使用C语言编一个正则表达式解释器可以实现对字符串进行匹配和提取等功能。 首先,我们需要设计一个数据结构来表示正则表达式,可以使用树形结构来表示。每个节点代表一个操作,例如字符匹配、非字符匹配、或操作、连接操作等。节点可以包含子节点,用来表示更复杂的正则表达式。 接下来,我们需要编解析器,用来将正则表达式字符串解析为树形结构。解析过程中,我们可以使用递归下降的方法,对每个字符进行解析并构建对应的节点。 然后,我们编匹配函数,用来对输入字符串进行匹配。匹配函数根据正则表达式树进行遍历,并根据节点类型执行对应操作。例如,对于字符匹配节点,我们检查当前字符是否与正则表达式中的字符相匹配。对于或操作节点,我们尝试匹配左子节点或右子节点。对于连接操作节点,我们依次尝试匹配左子节点和右子节点。 最后,我们可以对匹配到的结果进行处理。例如,可以将匹配到的子字符串提取出来,或者进行其他操作。 需要注意的是,正则表达式的解释器相对较为复杂,需要对字符串处理、数据结构设计以及递归等知识有一定了解。在编过程中,还需考虑一些特殊字符的转义以及一些复杂的正则表达式语法的处理。 ### 回答3: 要用C语言一个正则表达式解释器,首先需要了解正则表达式的基本语法和规则。正则表达式是一种用于匹配和操作字符串的工具,它由特定的字符和操作符组成,用于描述字符串的模式。 在C语言中,可以使用正则表达式库来实现正则表达式解释器。一个常用的库是PCRE(Perl Compatible Regular Expressions),它提供了许多现成的函数和数据结构来处理正则表达式。 首先需要在C代码中包含PCRE库的头文件,并链接PCRE库。然后可以使用PCRE提供的函数来编译和解释正则表达式。 编译正则表达式可以使用函数pcre_compile,它接受一个字符串作为正则表达式,并返回一个编译后的正则表达式对象。例如: ```c const char *regex_str = "abc"; pcre *regex = pcre_compile(regex_str, 0, &error, &erroffset, NULL); ``` 解释正则表达式可以使用函数pcre_exec,它接受一个编译后的正则表达式对象、待匹配的字符串和其他参数,并返回匹配的结果。例如: ```c const char *text = "abcdefg"; int matches[30]; int result = pcre_exec(regex, NULL, text, strlen(text), 0, 0, matches, 30); if (result >= 0) { printf("Match found!\n"); for (int i = 0; i < result; i++) { printf("Matched substring: %.*s\n", matches[2*i+1] - matches[2*i], text + matches[2*i]); } } ``` 以上代码只是一个简单的示例,实际上正则表达式的解释器还需要处理更多的功能,如元字符、分组、重复等。可以根据具体的需求和正则表达式语法进行扩展和修改。 总之,用C语言编正则表达式解释器需要使用正则表达式库,了解库提供的函数和数据结构,并根据正则表达式的语法编相应的解释器代码。通过使用正则表达式解释器,可以在C语言中方便地处理字符串的匹配和操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值