Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2708689
  • 博文数量: 416
  • 博客积分: 10220
  • 博客等级: 上将
  • 技术积分: 4193
  • 用 户 组: 普通用户
  • 注册时间: 2006-12-15 09:47
文章分类

全部博文(416)

文章存档

2022年(1)

2021年(1)

2020年(1)

2019年(5)

2018年(7)

2017年(6)

2016年(7)

2015年(11)

2014年(1)

2012年(5)

2011年(7)

2010年(35)

2009年(64)

2008年(48)

2007年(177)

2006年(40)

我的朋友

分类: C/C++

2006-12-30 10:43:09

以下贴子收集而来,乱而无序,加上本人刚刚开始学习,还不能去伪存真,归纳整理,但可以对比参照学习。

正则表达式语法
正则表达式的语法规则和标记
实例分析
正则表达式与glob比较
入门简介
使用实例
正则表达式系统教程

[转贴]正则表达式语法
 
 
一个正则表达式就是由普通字符(例如字符 a 到 z)以及特殊字符(称为元字符)组成的文字模式。该模式描述在查找文字主体时待匹配的一个或多个字符串。正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配。
这里有一些可能会遇到的正则表达式示例:
Visual Basic VBScript 匹配
Scripting Edition
/^\[ \t]*$/ "^\[ \t]*$" 匹配一个空白行。
/\d{2}-\d{5}/ "\d{2}-\d{5}" 验证一个ID号码是否由一个2位字,一
个连字符以及一个5位数字组成。
/<(.*)>.*<\/\1>/ "<(.*)>.*<\/\1>" 匹配一个 HTML 标记。

下表是元字符及其在正则表达式上下文中的行为的一个完整列表:
字符 描述
\ 将下一个字符标记为一个特殊字符、或一个原义字符、或一个 后
向引用、或一个八进制转义符。例如,’n’ 匹配字符 "n"。’\n’
匹配一个换行符。序列 ’\\’ 匹配 "\" 而 "\(" 则匹配 "("。
^ 匹配输入字符串的开始位置。如果设置了 RegExp 对象的
Multiline 属性,^ 也匹配 ’\n’ 或 ’\r’ 之后的位置。
$ 匹配输入字符串的结束位置。如果设置了 RegExp 对象的
Multiline 属性,$ 也匹配 ’\n’ 或 ’\r’ 之前的位置。
* 匹配前面的子表达式零次或多次。例如,zo* 能匹配 "z" 以及
"zoo"。 * 等价于{0,}。
+ 匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 "zo" 以
及 "zoo",但不能匹配 "z"。+ 等价于 {1,}。
? 匹配前面的子表达式零次或一次。例如,"do(es)?" 可以匹配
"do" 或 "does" 中的"do" 。? 等价于 {0,1}。
{n} n 是一个非负整数。匹配确定的 n 次。例如,’o{2}’ 不能匹配
"Bob" 中的 ’o’,但是能匹配 "food" 中的两个 o。
{n,} n 是一个非负整数。至少匹配n 次。例如,’o{2,}’ 不能匹配
"Bob" 中的 ’o’,但能匹配 "foooood" 中的所有 o。’o{1,}’
等价于 ’o+’。’o{0,}’ 则等价于 ’o*’。
{n,m} m 和 n 均为非负整数,其中n <= m。最少匹配 n 次且最多匹
配 m 次。刘, "o{1,3}" 将匹配 "fooooood" 中的前三个o。
’o{0,1}’等价于’o?’。请注意在逗号和两个数之间不能有空格
? 当该字符紧跟在任何一个其他限制符 (*, +, ?, {n}, {n,},
{n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的
匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜
索的字符串。例如,对于字符串 "oooo",’o+?’ 将匹配单个
"o",而 ’o+’ 将匹配所有 ’o’。
. 匹配除 "\n" 之外的任何单个字符。要匹配包括 ’\n’ 在内的任
何字符,请使用象 ’[.\n]’ 的模式。
(pattern) 匹配pattern 并获取这一匹配。所获取的匹配可以从产生的
Matches 集合得到,在VBScript 中使用 SubMatches 集合,在
Visual Basic Scripting Edition 中则使用 $0…$9 属性。要
匹配圆括号字符,请使用 ’\(’ 或 ’\)’。
(?attern) 匹配 pattern 但不获取匹配结果,也就是说这是一个非获取匹
配,不进行存储供以后使用。这在使用 "或" 字符 (|) 来组合
一个模式的各个部分是很有用。例如, ’industr(?:y|ies) 就
是一个比 ’industry|industries’ 更简略的表达式。
(?=pattern) 正向预查,在任何匹配 pattern 的字符串开始处匹配查找字符
串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后
使用。例如,’Windows (?=95|98|NT|2000)’ 能匹配"Windows
2000"中的"Windows",但不能匹配"Windows3 .1"中"Windows"。
预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹
配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之
后开始。
(?!pattern) 负向预查,在任何不匹配Negative lookahead matches the
search string at any point where a string not matching
pattern 的字符串开始处匹配查找字符串。这是一个非获取匹
配,也就是说,该匹配不需要获取供以后使用。例如’Windows
(?!95|98|NT|2000)’ 能匹配 "Windows 3.1" 中的 "Windows",
但不能匹配 "Windows 2000" 中的 "Windows"。预查不消耗字
符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开
始下一次匹配的搜索,而不是从包含预查的字符之后开始
x|y 匹配 x 或 y。例如,’z|food’ 能匹配 "z" 或 "food"。’(z|f)
ood’ 则匹配 "zood" 或 "food"。
[xyz] 字符集合。匹配所包含的任意一个字符。例如, ’[abc]’ 可以
匹配 "plain" 中的 ’a’。
[^xyz] 负值字符集合。匹配未包含的任意字符。例如, ’[^abc]’ 可以
匹配 "plain" 中的’p’。
[a-z] 字符范围。匹配指定范围内的任意字符。例如,’[a-z]’ 可以匹
配 ’a’ 到 ’z’ 范围内的任意小写字母字符。
[^a-z] 负值字符范围。匹配任何不在指定范围内的任意字符。例如,
’[^a-z]’ 可以匹配任何不在 ’a’ 到 ’z’ 范围内的任意字符。
\b 匹配一个单词边界,也就是指单词和空格间的位置。例如,
’er\b’ 可以匹配"never" 中的 ’er’,但不能匹配 "verb" 中
的 ’er’。
\B 匹配非单词边界。’er\B’ 能匹配 "verb" 中的 ’er’,但不能匹
配 "never" 中的 ’er’。
\cx 匹配由x指明的控制字符。例如, \cM 匹配一个 Control-M 或
回车符。 x 的值必须为 A-Z 或 a-z 之一。否则,将 c 视为一
个原义的 ’c’ 字符。
\d 匹配一个数字字符。等价于 [0-9]。
\D 匹配一个非数字字符。等价于 [^0-9]。
\f 匹配一个换页符。等价于 \x0c 和 \cL。
\n 匹配一个换行符。等价于 \x0a 和 \cJ。
\r 匹配一个回车符。等价于 \x0d 和 \cM。
\s 匹配任何空白字符,包括空格、制表符、换页符等等。等价于
[ \f\n\r\t\v]。
\S 匹配任何非空白字符。等价于 [^ \f\n\r\t\v]。
\t 匹配一个制表符。等价于 \x09 和 \cI。
\v 匹配一个垂直制表符。等价于 \x0b 和 \cK。
\w 匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’。
\W 匹配任何非单词字符。等价于 ’[^A-Za-z0-9_]’。
\xn 匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确
定的两个数字长。例如, ’\x41’ 匹配 "A"。’\x041’ 则等价
于 ’\x04’ & "1"。正则表达式中可以使用 ASCII 编码。.
\num 匹配 num,其中num是一个正整数。对所获取的匹配的引用。
例如,’(.)\1’ 匹配两个连续的相同字符。
\n 标识一个八进制转义值或一个后向引用。如果 \n 之前至少 n
个获取的子表达式,则 n 为后向引用。否则,如果 n 为八进制
数字 (0-7),则 n 为一个八进制转义值。
\nm 标识一个八进制转义值或一个后向引用。如果 \nm 之前至少有
is preceded by at least nm 个获取得子表达式,则 nm 为后
向引用。如果 \nm 之前至少有 n 个获取,则 n 为一个后跟文
字 m 的后向引用。如果前面的条件都不满足,若 n 和 m 均为
八进制数字 (0-7),则 \nm 将匹配八进制转义值 nm。
\nml 如果 n 为八进制数字 (0-3),且 m 和 l 均为八进制数字 (0-
7),则匹配八进制转义值 nml。
\un 匹配 n,其中 n 是一个用四个十六进制数字表示的Unicode字
符。例如, \u00A9 匹配版权符号 (?)。
找工作,招人才,到Linuxeden人才频道 
--------------------------------------------------------------------------------
此帖于 2006-05-18 23:39 被 dgkgnrt 编辑. 
     
dgkgnrt
查看公开信息
发送悄悄话给dgkgnrt
给dgkgnrt发送Email
查找dgkgnrt发表的更多帖子
添加 dgkgnrt 到好友列表
 2006-05-17, 22:11    #2 
dgkgnrt
注册用户
 

注册日期: 2005年11月
我的BLOG 我的职场简历
帖子: 102
精华: 3
现金: 400 Eden积分
资产: 400 Eden积分
 正则表达式的语法规则和标记
  现在我们正式进入则表达式的学习,我会根据实例结合讲解正则表达式的用法, 看完后你就会觉得写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 任何白字符,包括空格、制表符、分页符等。等价于“[ \f\n\r\t\v]”
    \S 任何非空白的字符。等价于“^\f\n\r\t\v]”
    \w 任何单词字符,包括字母和下划线。等价于“[A-Za-z0-9_]”
    \W 任何非单词字符。等价于“[^A-Za-z0-9_]”
    \b匹配单词的结尾。例如:
      ve\b 匹配单词“love”等,但不匹配“very”、“even”等
    \B匹配单词的开头。例如:
      ve\B 匹配单词“very”等,但不匹配“love”等
    \d匹配一个数字字符,等价于[0-9]。例如:
      abc\dxyz 匹配“abc2xyz”、“abc4xyz”等,但不匹配“abcaxyz”、“abc-xyz”等
    \D匹配一个非数字字符,等价于[^0-9]。例如:
      abc\Dxyz 匹配“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等形式出现。初步总结一下就是,链接地址必须符合如下条件:
-->
阅读(2609) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~