正则表达式详解(一)正则表达式初步
2006-10-31 14:40
148 查看
正则表达式详解(一)正则表达式初步 —— by Ivony... 转载请声明出处
正则表达式的作用是从一个字符串中捕获符合要求的字符串。
先看一个最简单的捕获:
“a123b”
匹配:
“aaab12bb13123c”
如果一个字符串中存在至少一个捕获,就算这个正则表达式匹配此字符串。如果只存在一个捕获,而且此捕获是整个字符串,则算完全匹配。
可以用括号可以者强调符号的结合顺序,如正则表达式/(123)|(abc)/”捕获”123”或者”abc”
字符类:
可以用 [abc] 的形式来表示 (a|b|c) ,如:
正则表达式 /[abc]/ 捕获 ”a” 、”b” 或者 ”c”。
“^”
放在 [] 的开头表示不捕获这些字符,如:
正则表达式 /[^abc]/ 捕获除了 ”a” 、 ”b” 和 ”c”
以外的任何字符。
“-“
放在两个字符之间,表示匹配在字符表上这两个字符之间的所有字符。如:
[a-z] = [abcdefghijklmnopqrstuvwxyz]
[a-zA-Z] = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
[0-9] = [0123456789]
特殊的字符类:
\w = [a-zA-Z_0-9]
\W = [^\w]
\s = [ \f\n\r\t\v]
(注1)
\S = [^\s]
\d = [0-9]
\D = [^\d]
注1:\f\n\r\t\v与C语言转义字符串含义相同。如(\n换行符, \t跳格符)
重复:
字符类的特殊构造:
正则表达式 /a{1,3}/表示/(a)|(aa)|(aaa)/,捕获”a”、”aa”或者”aaa”。
* = {0,
无穷大}
+ = {1,
无穷大}
? = {0,1}
重复可以与括号一起用,如:
正则表达式 /(abc){1,2}/捕获”abc”或者”abcabc”
。
零重复的作用:
零重复代表不捕获任何字符。单独使用没什么意义,但可以组合。如:
(如数学中的3x5 = 1x5+2x5 ^_^)
如正则表达式:/([abc]1){2,3}/ = /(((a|b|c)1)((a|b|c)1))|(((a|b|c)1)((a|b|c)1)((a|b|c)1))/
断言:
另有特殊字符约定如下:
任何两个合法的正则表达式并在一起的时候,在它们之间就形成断言。如正则表达式: /ab/ 是由正则表达式 /a/ 和 /b/ 并而组成的,在a和b之间就形成了断言。/ab/ 正则表达式中的 /a/ 只能捕获在字符 ”b” 前面的 ”a”,而 /b/ 也只能捕获字符 ”a” 后面的 ”b” 。
. = 任何字符(如果没有加SingleLine参数则不匹配”\n”)
正则表达式/ab(c?)/捕获”ab”或者”abc”。
以上所有的不包含无穷大重复的正则表达式都可以转化为只包含,或、并和括号的正则表达式。
零宽度(非捕获)断言符:
正则表达式 /abc$/捕获在字符串结尾处的abc,而忽略字符串中间任何的 ”abc”,如:
“123abcc”,无捕获,不匹配
“abcsabc”
“^”断言此处一定是字符串的开头。
“$”断言此处一定是字符串的结尾,如:
“12ac123”
“12abcc”“01262312343”
任何两个正则表达式放在一起就成了并,如 /a/ 是一个合法的正则表达式,它捕获 ”a” 字符, /b/ 也是一个合法的正则表达式,它捕获 ”b” 字符。/ab/ 这个正则表达式捕获连在一起的 ”ab”
并:
这样的字符串。在并的时候,两个正则表达式之间形成了断言。(关于断言会在下面讲到)。
括号:
“或”符号(“|”):
正则表达式 /123|a/ 捕获 ”123” 或者 ”a”,如:
正则表达式 /123/ 捕获任意字符串中的 ”123”。如:
正则表达式是干什么的:
正则表达式的作用是从一个字符串中捕获符合要求的字符串。
先看一个最简单的捕获:
“a123b”
匹配:
“aaab12bb13123c”
如果一个字符串中存在至少一个捕获,就算这个正则表达式匹配此字符串。如果只存在一个捕获,而且此捕获是整个字符串,则算完全匹配。
可以用括号可以者强调符号的结合顺序,如正则表达式/(123)|(abc)/”捕获”123”或者”abc”
字符类:
可以用 [abc] 的形式来表示 (a|b|c) ,如:
正则表达式 /[abc]/ 捕获 ”a” 、”b” 或者 ”c”。
“^”
放在 [] 的开头表示不捕获这些字符,如:
正则表达式 /[^abc]/ 捕获除了 ”a” 、 ”b” 和 ”c”
以外的任何字符。
“-“
放在两个字符之间,表示匹配在字符表上这两个字符之间的所有字符。如:
[a-z] = [abcdefghijklmnopqrstuvwxyz]
[a-zA-Z] = [abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]
[0-9] = [0123456789]
特殊的字符类:
\w = [a-zA-Z_0-9]
\W = [^\w]
\s = [ \f\n\r\t\v]
(注1)
\S = [^\s]
\d = [0-9]
\D = [^\d]
注1:\f\n\r\t\v与C语言转义字符串含义相同。如(\n换行符, \t跳格符)
重复:
字符类的特殊构造:
正则表达式 /a{1,3}/表示/(a)|(aa)|(aaa)/,捕获”a”、”aa”或者”aaa”。
* = {0,
无穷大}
+ = {1,
无穷大}
? = {0,1}
重复可以与括号一起用,如:
正则表达式 /(abc){1,2}/捕获”abc”或者”abcabc”
。
零重复的作用:
零重复代表不捕获任何字符。单独使用没什么意义,但可以组合。如:
(如数学中的3x5 = 1x5+2x5 ^_^)
如正则表达式:/([abc]1){2,3}/ = /(((a|b|c)1)((a|b|c)1))|(((a|b|c)1)((a|b|c)1)((a|b|c)1))/
断言:
另有特殊字符约定如下:
任何两个合法的正则表达式并在一起的时候,在它们之间就形成断言。如正则表达式: /ab/ 是由正则表达式 /a/ 和 /b/ 并而组成的,在a和b之间就形成了断言。/ab/ 正则表达式中的 /a/ 只能捕获在字符 ”b” 前面的 ”a”,而 /b/ 也只能捕获字符 ”a” 后面的 ”b” 。
. = 任何字符(如果没有加SingleLine参数则不匹配”\n”)
正则表达式/ab(c?)/捕获”ab”或者”abc”。
以上所有的不包含无穷大重复的正则表达式都可以转化为只包含,或、并和括号的正则表达式。
零宽度(非捕获)断言符:
正则表达式 /abc$/捕获在字符串结尾处的abc,而忽略字符串中间任何的 ”abc”,如:
“123abcc”,无捕获,不匹配
“abcsabc”
“^”断言此处一定是字符串的开头。
“$”断言此处一定是字符串的结尾,如:
“12ac123”
“12abcc”“01262312343”
任何两个正则表达式放在一起就成了并,如 /a/ 是一个合法的正则表达式,它捕获 ”a” 字符, /b/ 也是一个合法的正则表达式,它捕获 ”b” 字符。/ab/ 这个正则表达式捕获连在一起的 ”ab”
并:
这样的字符串。在并的时候,两个正则表达式之间形成了断言。(关于断言会在下面讲到)。
括号:
“或”符号(“|”):
正则表达式 /123|a/ 捕获 ”123” 或者 ”a”,如:
正则表达式 /123/ 捕获任意字符串中的 ”123”。如:
正则表达式是干什么的:
相关文章推荐
- 初步了解并使用正则表达式 (REGular EXPression)
- 初步运用多进程,利用正则表达式,爬取猫眼电影top100排行榜,储存到本地
- R语言-正则表达式初步 v0.1
- D5_正则表达式初步
- 最初步的正则表达式引擎
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- MySQL正则表达式初步
- java--正则表达式初步学习
- 算法基础——2.4正则表达式初步
- 最初步的正则表达式引擎:将显示的连接符改为了非显示的连接符
- 最初步的正则表达式引擎:在上个版本的基础上增加了转义字符
- [C#][固定格式网页解析]使用正则表达式处理网页的初步体会
- linux c ip过滤 正则表达式 初步代码
- 正则表达式初步了解(参考jb51)
- MySQL正则表达式初步
- 对正则表达式的初步总结
- 正则表达式之初步学习
- 正则表达式详解(一)正则表达式初步
- 正则表达式的初步学习