海运的博客

正则表达式中哪些字符需要转义

发布时间:August 12, 2013 // 分类:正则 // No Comments

以下字符在正则中都有特定的含义,如需匹配字符本身需要使用\转义。

^ 匹配字符串的开始位置
$ 匹配字符串的结尾位置
* 匹配前面的子表达式零次或多次
. 匹配除换行符\n之外的任何单字符
? 匹配前面的子表达式零次或一次
\ 转义下个字符
| 指明两项之间的一个选择
() 标记一个子表达式
{} 标记限定符表达式
[] 标记一个中括号表达式
() 标记一个子表达式的开始和结束位置

常见几种正则表达式区别

发布时间:August 9, 2013 // 分类:正则 // 1 Comment

字符 说明 Basic RegEx Extended RegEx python RegEx Perl regEx
转义   \ \ \ \
^ 匹配行首,例如'^dog'匹配以字符串dog开头的行(注意:awk 指令中,'^'则是匹配字符串的开始) ^ ^ ^ ^
$ 匹配行尾,例如:'^、dog$'匹配以字符串 dog 为结尾的行(注意:awk 指令中,'$'则是匹配字符串的结尾) $ $ $ $

^$

匹配空行

^$ ^$ ^$ ^$
^string$ 匹配行,例如:'^dog$'匹配只含一个字符串 dog 的行 ^string$ ^string$ ^string$ ^string$
\< 匹配单词,例如:'\<frog' (等价于'\bfrog'),匹配以 frog 开头的单词 \< \< 不支持 不支持(但可以使用\b来匹配单词,例如:'\bfrog')

\>

匹配单词,例如:'frog\>'(等价于'frog\b '),匹配以 frog 结尾的单词 \> \> 不支持 不支持(但可以使用\b来匹配单词,例如:'frog\b')

\<x\>

匹配一个单词或者一个特定字符,例如:'\<frog\>'(等价于'\bfrog\b')、'\<G\>' \<x\> \<x\> 不支持 不支持(但可以使用\b来匹配单词,例如:'\bfrog\b'

()

匹配表达式,例如:不支持'(frog)' 不支持(但可以使用\(\),如:\(dog\) () () ()

\(\)

匹配表达式,例如:不支持'(frog)' \(\) 不支持(同()) 不支持(同()) 不支持(同())

匹配前面的子表达式 0 次或 1 次(等价于{0,1}),例如:where(is)?能匹配"where" 以及"whereis" 不支持(同\?)
\? 匹配前面的子表达式 0 次或 1 次(等价于'\{0,1\}'),例如:'where\(is\)\? '能匹配 "where"以及"whereis" \? 不支持(同?) 不支持(同?) 不支持(同?)
? 当该字符紧跟在任何一个其他限制符(*, +, ?, {n},{n,}, {n,m}) 后面时,匹配模式是非贪婪的。非贪婪模式尽可能少的匹配所搜索的字符串,而默认的贪婪模式则尽可能多的匹配所搜索的字符串。例如,对于字符串 "oooo",'o+?' 将匹配单个"o",而 'o+' 将匹配所有 'o' 不支持 不支持 不支持 不支持
. 匹配除换行符('\n')之外的任意单个字符(注意:awk 指令中的句点能匹配换行符) . .(如果要匹配包括“\n”在内的任何一个字符,请使用:'(^$)|(.) . .(如果要匹配包括“\n”在内的任何一个字符,请使用:' [.\n] '
* 匹配前面的子表达式 0 次或多次(等价于{0, }),例如:zo* 能匹配 "z"以及 "zoo" * * * *
\+ 匹配前面的子表达式 1 次或多次(等价于'\{1, \}'),例如:'where\(is\)\+ '能匹配 "whereis"以及"whereisis" \+ 不支持(同+) 不支持(同+) 不支持(同+)
+ 匹配前面的子表达式 1 次或多次(等价于{1, }),例如:zo+能匹配 "zo"以及 "zoo",但不能匹配 "z" 不支持(同\+) + + +

{n}

n 必须是一个 0 或者正整数,匹配子表达式 n 次,例如:zo{2}能匹配 不支持(同\{n\}) {n} {n} {n}
{n,} "zooz",但不能匹配 "Bob"n 必须是一个 0 或者正整数,匹配子表达式大于等于 n次,例如:go{2,} 不支持(同\{n,\}) {n,} {n,} {n,}
{n,m} 能匹配 "good",但不能匹配 godm 和 n 均为非负整数,其中 n <= m,最少匹配 n 次且最多匹配 m 次 ,例如:o{1,3}将配"fooooood" 中的前三个 o(请注意在逗号和两个数之间不能有空格) 不支持(同\{n,m\}) {n,m} {n,m} {n,m}

x|y

匹配 x 或 y,例如: 不支持'z|(food)' 能匹配 "z" 或"food";'(z|f)ood' 则匹配"zood" 或 "food" 不支持(同x\|y) x|y x|y x|y

[0-9]

匹配从 0 到 9 中的任意一个数字字符(注意:要写成递增) [0-9] [0-9] [0-9] [0-9]

[xyz]

字符集合,匹配所包含的任意一个字符,例如:'[abc]'可以匹配"lay" 中的 'a'(注意:如果元字符,例如:. *等,它们被放在[ ]中,那么它们将变成一个普通字符) [xyz] [xyz] [xyz] [xyz]

[^xyz]

负值字符集合,匹配未包含的任意一个字符(注意:不包括换行符),例如:'[^abc]' 可以匹配 "Lay" 中的'L'(注意:[^xyz]在awk 指令中则是匹配未包含的任意一个字符+换行符) [^xyz] [^xyz] [^xyz] [^xyz]
[A-Za-z] 匹配大写字母或者小写字母中的任意一个字符(注意:要写成递增) [A-Za-z] [A-Za-z] [A-Za-z] [A-Za-z]
[^A-Za-z] 匹配除了大写与小写字母之外的任意一个字符(注意:写成递增) [^A-Za-z] [^A-Za-z] [^A-Za-z] [^A-Za-z]

\d

匹配从 0 到 9 中的任意一个数字字符(等价于 [0-9]) 不支持 不支持 \d \d

\D

匹配非数字字符(等价于 [^0-9]) 不支持 不支持 \D \D
\S 匹配任何非空白字符(等价于[^\f\n\r\t\v]) 不支持 不支持 \S \S
\s 匹配任何空白字符,包括空格、制表符、换页符等等(等价于[ \f\n\r\t\v]) 不支持 不支持 \s \s
\W

匹配任何非单词字符 (等价于[^A-Za-z0-9_])

\W \W \W \W
\w 匹配包括下划线的任何单词字符(等价于[A-Za-z0-9_]) \w \w \w \w
\B 匹配非单词边界,例如:'er\B' 能匹配 "verb" 中的'er',但不能匹配"never" 中的'er' \B \B \B \B

\b

匹配一个单词边界,也就是指单词和空格间的位置,例如: 'er\b' 可以匹配"never" 中的 'er',但不能匹配 "verb" 中的'er' \b \b \b \b
\t 匹配一个横向制表符(等价于 \x09和 \cI) 不支持 不支持 \t \t
\v 匹配一个垂直制表符(等价于 \x0b和 \cK) 不支持 不支持 \v \v
\n 匹配一个换行符(等价于 \x0a 和\cJ) 不支持 不支持 \n \n
\f 匹配一个换页符(等价于\x0c 和\cL) 不支持 不支持 \f \f
\r 匹配一个回车符(等价于 \x0d 和\cM) 不支持 不支持 \r \r
\\ 匹配转义字符本身"\" \\ \\ \\ \\

\cx

匹配由 x 指明的控制字符,例如:\cM匹配一个Control-M 或回车符,x 的值必须为A-Z 或 a-z 之一,否则,将 c 视为一个原义的 'c' 字符 不支持 不支持   \cx

\xn

匹配 n,其中 n 为十六进制转义值。十六进制转义值必须为确定的两个数字长,例如:'\x41' 匹配 "A"。'\x041' 则等价于'\x04' & "1"。正则表达式中可以使用 ASCII 编码 不支持 不支持   \xn

\num

匹配 num,其中 num是一个正整数。表示对所获取的匹配的引用 不支持 \num \num  
[:alnum:] 匹配任何一个字母或数字([A-Za-z0-9]),例如:'[[:alnum:]] ' [:alnum:] [:alnum:] [:alnum:] [:alnum:]
[:alpha:] 匹配任何一个字母([A-Za-z]), 例如:' [[:alpha:]] ' [:alpha:] [:alpha:] [:alpha:] [:alpha:]
[:digit:] 匹配任何一个数字([0-9]),例如:'[[:digit:]] ' [:digit:] [:digit:] [:digit:] [:digit:]
[:lower:] 匹配任何一个小写字母([a-z]), 例如:' [[:lower:]] ' [:lower:] [:lower:] [:lower:] [:lower:]
[:upper:] 匹配任何一个大写字母([A-Z]) [:upper:] [:upper:] [:upper:] [:upper:]
[:space:] 任何一个空白字符: 支持制表符、空格,例如:' [[:space:]] ' [:space:] [:space:] [:space:] [:space:]
[:blank:] 空格和制表符(横向和纵向),例如:'[[:blank:]]'ó'[\s\t\v]' [:blank:] [:blank:] [:blank:] [:blank:]
[:graph:] 任何一个可以看得见的且可以打印的字符(注意:不包括空格和换行符等),例如:'[[:graph:]] ' [:graph:] [:graph:] [:graph:] [:graph:]
[:print:] 任何一个可以打印的字符(注意:不包括:[:cntrl:]、字符串结束符'\0'、EOF 文件结束符(-1), 但包括空格符号),例如:'[[:print:]] ' [:print:] [:print:] [:print:] [:print:]

[:cntrl:]

任何一个控制字符(ASCII 字符集中的前 32 个字符,即:用十进制表示为从 0 到31,例如:换行符、制表符等等),例如:' [[:cntrl:]]'

[:cntrl:]

[:cntrl:]

[:cntrl:]

[:cntrl:]

[:punct:] 任何一个标点符号(不包括:[:alnum:]、[:cntrl:]、[:space:]这些字符集) [:punct:] [:punct:] [:punct:] [:punct:]
[:xdigit:] 任何一个十六进制数(即:0-9,a-f,A-F) [:xdigit:] [:xdigit:] [:xdigit:] [:xdigit:]

常用正则表达式

发布时间:August 9, 2013 // 分类:正则 // No Comments

<h1>常用正则表达式</h1>
<p>说明:正则表达式通常用于两种任务:1.验证,2.搜索/替换。用于验证时,通常需要在前后分别加上^和$,以匹配整个待验证字符串;搜索/替换时是否加上此限定则根据搜索的要求而定,此外,也有可能要在前后加上\b而不是^和$。此表所列的常用正则表达式,除个别外均未在前后加上任何限定,请根据需要,自行处理。</p>
<table>
    <thead>
        <tr>
            <th>说明</th>
            <th>正则表达式</th>
        </tr>
    </thead>
    <tr>
        <td>网址(URL)</td>
        <td><span class="regex">[a-zA-z]+://[^\s]*</span></td>
    </tr>
    <tr>
        <td>IP地址(IP Address)</td>
        <td><span class="regex">((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)</span></td>
    </tr>
    <tr>
        <td>电子邮件(Email)</td>
        <td><span class="regex">\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*</span></td>
    </tr>
    <tr>
        <td>QQ号码</td>
        <td><span class="regex">[1-9]\d{4,}</span></td>
    </tr>
    <tr>
        <td>HTML标记(包含内容或自闭合)</td>
        <td><span class="regex">&lt;(.*)(.*)&gt;.*&lt;\/\1&gt;|&lt;(.*) \/&gt;</span></td>
    </tr>
    <tr>
        <td>密码(由数字/大写字母/小写字母/标点符号组成,四种都必有,8位以上)</td>
        <td><span class="regex">(?=^.{8,}$)(?=.*\d)(?=.*\W+)(?=.*[A-Z])(?=.*[a-z])(?!.*\n).*$</span></td>
    </tr>

    <tr>
        <td>日期(年-月-日)</td>
        <td><span class="regex">(\d{4}|\d{2})-((1[0-2])|(0?[1-9]))-(([12][0-9])|(3[01])|(0?[1-9]))</span></td>
    </tr>
    <tr>
        <td>日期(月/日/年)</td>
        <td><span class="regex">((1[0-2])|(0?[1-9]))/(([12][0-9])|(3[01])|(0?[1-9]))/(\d{4}|\d{2})</span></td>
    </tr>
    <tr>
        <td>时间(小时:分钟, 24小时制)</td>
        <td><span class="regex">((1|0?)[0-9]|2[0-3]):([0-5][0-9])</span></td>
    </tr>

    <tr>
        <td>汉字(字符)</td>
        <td><span class="regex">[\u4e00-\u9fa5]</span></td>
    </tr>
    <tr>
        <td>中文及全角标点符号(字符)</td>
        <td><span class="regex">[\u3000-\u301e\ufe10-\ufe19\ufe30-\ufe44\ufe50-\ufe6b\uff01-\uffee]</span></td>
    </tr>
    <tr>
        <td>中国大陆固定电话号码</td>
        <td><span class="regex">(\d{4}-|\d{3}-)?(\d{8}|\d{7})</span></td>
    </tr>
    <tr>
        <td>中国大陆手机号码</td>
        <td><span class="regex">1\d{10}</span></td>
    </tr>
    <tr>
        <td>中国大陆邮政编码</td>
        <td><span class="regex">[1-9]\d{5}</span></td>
    </tr>
    <tr>
        <td>中国大陆身份证号(15位或18位)</td>
        <td><span class="regex">\d{15}(\d\d[0-9xX])?</span></td>
    </tr>

    <tr>
        <td>非负整数(正整数或零)</td>
        <td><span class="regex">\d+</span></td>
    </tr>
    <tr>
        <td>正整数</td>
        <td><span class="regex">[0-9]*[1-9][0-9]*</span></td>
    </tr>
    <tr>
        <td>负整数</td>
        <td><span class="regex">-[0-9]*[1-9][0-9]*</span></td>
    </tr>
    <tr>
        <td>整数</td>
        <td><span class="regex">-?\d+</span></td>
    </tr>
    <tr>
        <td>小数</td>
        <td><span class="regex">(-?\d+)(\.\d+)?</span></td>
    </tr>
    <tr>
        <td>不包含abc的单词</td>
        <td><span class="regex">\b((?!abc)\w)+\b</span></td>
    </tr>
</table>


原文:http://deerchao.net/tutorials/regex/common.htm

分类
最新文章
最近回复
  • ccc: 可以提供易调用openssl常用函数吗?
  • 夜未央: 在centos7 下面 貌似转换不了。有人遇到过么????
  • brian: 博主你好,请教一个问题。我使用fprobe进行将交换机流量转换成netflow时是没有问题的,...
  • 吴昊: 学习了,感谢博主分享
  • linhua: 只需配置 服务端 的接收端口随机化就行了, 发送端口 因为 连接追踪(conntrack)的缘...
  • Realm: 博主你好,按照你的教程设置了IP转发及SNAT:echo 1 > /proc/sys/net/...
  • Roki: 大神, 为什么我在make clean 就出错了呢 ?你能帮我看看吗 。。。474495758...
  • Duuge: 遇到相同的问题,但未能解决,请求帮助。1、遇到的问题:/target-i386_i486_uC...
  • carlo: 大哥,我觉得你的技术好牛逼!能加你QQ吗
  • lebron: Unknown package 'lrzsz'.Collected errors:* opkg...
页面执行耗时:0.054秒。-->