正则表达式在UBB论坛中的应用(1)

快乐老家来了

快乐老家来了

2016-02-19 16:43

清醒时做事,糊涂时读书,大怒时睡觉,无聊时关注图老师为大家准备的精彩内容。下面为大家推荐正则表达式在UBB论坛中的应用(1),无聊中的都看过来。

  一、读者指引

  读者指引帮助你掌握本文的梗概。以免你看了大半才明白这编文章不适合你,给你造成视觉污染。

  如果你正在用ASP写程序,或者你正在写一些诸如BBS、留言溥或表单数据检查之类的东东那就值得一看。

  如果你对正则表达式已经了如指掌,那么你不必一行行的看,只要看看我写的模板,再比较一下,取其精华就行了。

  如果你还是第一次接触正则表达式,那么你最好一行行的看,并逐条试验

  当你熟练的掌握了正则表达式的用法,你就会发现其乐无穷。

  二、正则表达式的概念

  什么是UBB代码?什么是正则表达式?

  UBB代码是HTML的一个变种。一般情况下,UBB论坛不允许你使用HTML代码,而只能用UBB代码替代HTML代码。

  UBB代码是一套由流行的UBB标签组成了固定代码,代码有统一的格式。用户只要遵循代码规则就可以实现用户想要的功能。如:

  想要显示粗体的how are you 字样,就应该输入 how are you而不是输入bhow are you/b

  你也许会问:ASP是怎样把 how are you转换为bhow are you/b的呢?

  回答这个问题就是:用正则表达式。

  三、正则表达式的用途

  有时我们在制作网站表单数据处理的时候(尤其是UBB论坛),都需要进行数据验证和字符串替代,特别是UBB论坛要进行大量的数据安全性和字符串替代

  邮于一般的论坛不支持HTML语法这就使得用户不能修改字体,不能贴图等等一些功能。这样使得论坛失去了吸引用户的一个强有力的途径。可能说一个强大的论坛在吸引用户数量上还是很重要的。这样就出现了一个UBB解决方案,即在论坛不支持HTML语法的情况下用户仍然可以定制自已贴子的样式,贴图,增加链接,转贴网页等等诸多的功能,可能达到支持HTML语法同样的效果,而且这样可以使得论坛相对于HTML的论坛安全性大大提高。用户基本不能对论坛过行任何恶意攻击。

  四、正则表达式的语法规则和标记

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

  现在我们正式进入则表达式的学习,我会根据实例结合讲解正则表达式的用法,看完后你就会觉得写UBB代码如此简单了,只要你一步一步的跟着我学 看完本文章后你就成为UBB高手了。激动人心的就是你能写出自已的UBB标签来了,再也不用到别人那里去拷贝现成的代码和模板了。 还好VBScritp5.0给我们提供了正则表达式对象,只要你的服务器安装了IE5.x,就可以运行了.

  字符描述:

  ^符号匹配字符串的开头。例如:

  ^abc 与abc xyz匹配,而不与xyz abc匹配

  $符号匹配字符串的结尾。例如:

  abc$ 与xyz abc匹配,而不与abc xyz匹配。

  注意:如果同时使用^符号和$符号,将进行精确匹配。例如:

  ^abc$ 只与abc匹配   

  *符号匹配0个或多个前面的字符。例如:

  ab* 可以匹配ab、abb、abbb等

  +符号匹配至少一个前面的字符。例如:

  ab+ 可以匹配abb、abbb等,但不匹配ab。

  ?符号匹配0个或1个前面的字符。例如:

  ab?c? 可以且只能匹配abc、abbc、abcc和abbcc

  .符号匹配除换行符以外的任何字符。例如:

  (.)+ 匹配除换行符以外的所有字符串

  x|y匹配x或y。例如:

  abc|xyz 可匹配 abc或 xyz,而ab(c|x)yz匹配 abcyz和abxyz

  {n}匹配恰好n次(n为非负整数)前面的字符。例如:

  a{2} 可以匹配aa,但不匹配a

  {n,}匹配至少n次(n为非负整数)前面的字符。例如:

  a{3,} 匹配aaa、aaaa等,但不匹配a和aa。

  注意:a{1,}等价于a+

  a{0,}等价于a*

  {m,n}匹配至少m个,至多n个前面的字符。例如:

  a{1,3} 只匹配a、aa和aaa。

  注意:a{0,1}等价于a?

  [xyz]表示一个字符集,匹配括号中字符的其中之一。例如:

  [abc] 匹配a、b和c

  [^xyz]表示一个否定的字符集。匹配不在此括号中的任何字符。例如:

  [^abc] 可以匹配除a、b和c之外的任何字符

  [a-z]表示某个范围内的字符,匹配指定区间内的任何字符。例如:

  [a-z] 匹配从a到z之间的任何一个小写字母字符

  [^m-n]表示某个范围之外的字符,匹配不在指定范围内的字符。例如:

  [m-n] 匹配除从m到n之间的任何字符

  符号是转义操作符。例如:

  n 换行符

  f 分页符

  r 回车

  t 制表符

  v 垂直制表符

  \ 匹配

  / 匹配/

  s 任何白字符,包括空格、制表符、分页符等。等价于[ fnrtv]

(本文来源于图老师网站,更多请访问https://m.tulaoshi.com/webkaifa/)

  S 任何非空白的字符。等价于^fnrtv]

  w 任何单词字符,包括字母和下划线。等价于[A-Za-z0-9_]

  W 任何非单词字符。等价于[^A-Za-z0-9_]

  b匹配单词的结尾。例如:

  veb 匹配单词love等,但不匹配very、even等

  B匹配单词的开头。例如:

  veB 匹配单词very等,但不匹配love等

  d匹配一个数字字符,等价于[0-9]。例如:

  abcdxyz 匹配abc2xyz、abc4xyz等,但不匹配abcaxyz、abc-xyz等

  D匹配一个非数字字符,等价于[^0-9]。例如:

  abcDxyz 匹配abcaxyz、abc-xyz等,但不匹配abc2xyz、abc4xyz等

  NUM匹配NUM个(其中NUM为一个正整数),引用回到记住的匹配。例如:

  (.)1 匹配两个连续相同的字符。

  oNUM匹配n(其中n为一个小于256的八进制换码值)。例如:

  o011 匹配制表符

  xNUM匹配NUM(其中NUM为一个小于256的十六进制换码值)。例如:

  x41 匹配字符A

  五、实例分析

  1)在字符串中精确查找链接地址

  ((http|https|ftp):(//|\\)((w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3})(((/[~]*|\[~]*)

  (w)+)|[.](w)+)*(((([?](w)+){1}[=]*))*((w)+){1}([&](w)+[=](w)+)*)*)

  我们知道,链接地址一般以http或者https或者ftp等形式出现。初步总结一下就是,链接地址必须符合如下条件:

  条件1

  以http://或者https://或者ftp://等开头(当然还有其它形式,这里只列出主要的)

  条件2

  http://后面必须跟一个单词字符,紧接着单词字符后面的是"."(这样的组合必须出现一次或多次)。紧跟着.后面的是域名后缀(如net或者com或者cn等,如果是以IP地址的形式出现就可以是数字)

  条件3

  出现完整的链接地址后,还可以出现下一级或者更多级的目录(还要注意个人主页的地址有可能出现"~"符号)

  条件4

  链接地址末尾可以带参数。如典型的页数?PageNo=2&action=display等

  现在我们用下面的代码来逐个匹配上面的条件

  1、((http|https|ftp):(//|\\) 满足条件1

  表示http:// http:\ https:// https:\ ftp:// ftp:\都匹配(在这里考虑了某些用户可能把"//"输成\的易发性错误)

  注意:"|"表示或者,""是转义字符。//表示"//",\\表示"\"

  2、((w)+[.]){1,}(net|com|cn|org|cc|tv|[0-9]{1,3}) 满足条件2

  ((w)+[.]){1,}表示一个单词字符加一个点号可以出现1次或者多次(这里考虑了某些用户喜欢省略www而将http://www.w3c.com写成http://w3c.com)

  (net|com|cn|org|cc|tv|[0-9]{1,3})表示必须要以net或者com或者cn或者org或者cc或者tv或者三位以下的数字结束

  [0-9]{1,3}表示三位以下的数字,因为ip地址的任何段不能超过255

  3、(((/[~]*|\[~]*)(w)+)|[.](w)+)* 满足条件3

  (/[~]*|\[~]*)表示可以出现"/~"或者是"~",(其中[~]*表示 ~ 可以出现也可以不出现),因为不是每个链接地址都有下一级目录

  (w)+)|[.](w)+)表示必须出现一个单词字符(即目录或者是一个带有扩展名的文件)

  注意:最后还有一个*表示上面括号内的可以出现也可以不出现,否则就只能匹配有下一级目录的链接地址了。

  4、(((([?](w)+){1}[=]*))*((w)+){1}([&](w)+[=](w)+)*)*)满足条件4

  ((([?](w)+){1}[=]*))*((w)+){1}表示形如"?PageNo=2"的字符串可以出现也可以不出现,如果出现则只能出现一次(因为不可能有两个?号出现)。

  ([&](w)+[=](w)+)*)表示形如&action=display的字符串可以出现也可以不出现(因为并不是每个网页都带有两个以上的参数。

  整个((([?](w)+){1}[=]*))*((w)+){1}([&](w)+[=](w)+)*)*表示形如?PageNo=2&action=display的字符串可以出现也可以不出现(即链接地址可以有参数也可以没有参数)

  把上面的组合起来,我们就可以匹配一个比较全面的链接地址了。比用简单的(http://S+)来匹配一个链接地址要好,读者可以自行行测试比较。当然,这段代码还有很多不足之处,希望大家能够继续改进。

  2)替代典型的UBB标签:[/b]

  我们的目的就是要把[b]成对的替换成b/b下面来看我们实现它的模板

  ([b])(.+)([/b])

  这里用了"(.+)"来配匹到之间的整个字符串,在替代的时候我们要写成这样

  str=checkexp(re,str,"b$2/b")

  (注意:checkexp是我自定义的函数,将在后面给出。这个函数将把[/b]按照我们提供的模板进行替代。)

  也许你会问这里出现一个"$2"是什么东东,呵注意了这个$2可是很重要的,它代表了"(.+)"所配匹的整个字符串。

  为什么是$2而不是$1、$3呢?因为$1代表([b])所匹配的"[b]"字符串,$3代表([/b])所匹配的""字符串,显然这里我们需要的是$2而不是$1$3。

展开更多 50%)
分享

猜你喜欢

正则表达式在UBB论坛中的应用(1)

Web开发
正则表达式在UBB论坛中的应用(1)

正则表达式在UBB论坛中的应用

Web开发
正则表达式在UBB论坛中的应用

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

正则表达式在UBB论坛中的应用(2)

Web开发
正则表达式在UBB论坛中的应用(2)

在ASP中利用“正则表达式” 对象实现UBB风格的论坛

ASP
在ASP中利用“正则表达式” 对象实现UBB风格的论坛

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

正则表达式的应用

Web开发
正则表达式的应用

正则表达式

Web开发
正则表达式

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

击中了我心脏的最深处 - QQ伤感分组

击中了我心脏的最深处 - QQ伤感分组

Javascript做为编程语言

Javascript做为编程语言
下拉加载更多内容 ↓