正则表达式基础语法例子
2017-09-20 09:35
246 查看
literal
功能:匹配文本字符串的字面值 literal例子:foo
re1 | re2
功能:匹配正则表达式 re1 或者 re2例子:foo|bar
.
功能:匹配任何字符(除了\n 之外)例子:
表达式:f.o 匹配:在字母“f”和“o”之间的任意一个字符;例如 fao、f9o、f#o 等 表达式:.. 匹配:任意两个字符
^
功能:匹配字符串起始部分例子:
表达式:^From 匹配:任何以 From 作为起始的字符串
$
功能:匹配字符串终止部分例子:
表达式:/bin/*sh$ 匹配:任何以/bin/tcsh 作为结尾的字符串
*
功能:匹配 0 次或者多次前面出现的正则表达式例子:
表达式:5* 匹配:5 或 555 或 没有5
+
功能:匹配 1 次或者多次前面出现的正则表达式例子:
表达式:[a-z]+\.com 匹配:a.com 或 abc.com 不匹配:.com
?
功能:匹配 0 次或者 1 次前面出现的正则表达式例子:
表达式:goo? 匹配:goo 或 gooo 不匹配:goooo
{N}
功能:匹配 N 次前面出现的正则表达式例子:
表达式:[0-9]{3} 匹配:123 或 999 不匹配:1234 或 12
{M,N}
功能:匹配 M~N 次前面出现的正则表达式表达式:[0-9]{1,3} 匹配:1 或 12 或 123 不匹配:1234
[…]
功能:匹配来自字符集的任意单一字符例子:
表达式:[aeiou] 匹配:a 或 e 或 i 或 o 或 u 不匹配:f 或 s 等
[..x−y..]
功能:匹配 x~y 范围中的任意单一字符例子:
表达式:[0-9] 匹配:1 或 5 或 8 (0到9之间的单个数字) 不匹配:a 表达式:[A-Za-z] 匹配:A, F, h 不匹配:5
[^…]
功能:不匹配此字符集中出现的任何一个字符,包括某一范围的字符(如果在此字符集中出现)例子:
表达式:[^aeiou]good 匹配:agood 或 egood 不匹配:sagood
(*|+|?|{})?
功能:用于匹配上面频繁出现/重复出现符号的非贪婪版本(*、+、?、{})解释:
贪婪模式:就是在整个表达式匹配成功的前提下,尽可能多的匹配,也就是所谓的“贪婪”,通俗点讲,就是看到想要的,有多少就捡多少,除非再也没有想要的了。
非贪婪模式:就是在整个表达式匹配成功的前提下,尽可能少的匹配,也就是所谓的“非贪婪”,通俗点讲,就是找到一个想要的捡起来就行了,至于还有没有没捡的就不管了。
例子:
字符串:'Thu Feb 15 17:46:04 2007::uzifzf@dpyivihw.gov::1171590364-6-8' 表达式:.+(\d+-\d+-\d+) 结果: Match 1 Full match 0-61 `Thu Feb 15 17:46:04 2007::uzifzf@dpyivihw.gov::1171590364-6-8` Group 1. 56-61 `4-6-8` (Group1 匹配到的是`4-6-8`) 表达式:.+?(\d+-\d+-\d+) # 注意,在加号后面,加了"?" 结果: Match 1 Full match 0-61 `Thu Feb 15 17:46:04 2007::uzifzf@dpyivihw.gov::1171590364-6-8` Group 1. 47-61 `1171590364-6-8` (Group1 匹配到的是`1171590364-6-8`) 字符串:aa<div>test1</div>bb<div>test2</div>cc 表达式:<div>.*</div> 结果:<div>test1</div>bb<div>test2</div> 表达式:<div>.*?</div> 结果:<div>test1</div>(这里指的是一次匹配结果,所以没包括<div>test2</div>)
(…)
功能:匹配封闭的正则表达式,然后另存为子组例子:([0-9]{3})?,f(oo|u)bar
\d
功能:匹配任何十进制数字,与[0-9]一致(\D 与\d 相反,不匹配任何非数值型的数字)例子:data\d+.txt
\w
功能:匹配任何字母数字字符,与[A-Za-z0-9_]相同(\W 与之相反)例子:[A-Za-z_]\w+
\s
功能:匹配任何空格字符,与[\n\t\r\v\f]相同(\S 与之相反)例子:of\sthe
\b
功能:匹配任何单词边界(\B 与之相反)例子:
表达式:\bThe\b 意思:仅仅匹配单词 the。 匹配:"a the b" 不区别:"fathe" 表达式:\Bthe 意思:任何包含但并不以 the 作为起始的字符串。 匹配:"fathe" 不区别:"a the b"
\N
功能:匹配已保存的子组 N(参见上面的(…))例子:price: \16
\c
功能:转义表达式用字符例子:
表达式:data\.txt 匹配:data.txt
\A(\Z)
功能:匹配字符串的起始(结束)(另见上面介绍的^和$)例子:\ADear
(?#comment)
功能:此处并不做匹配,只是作为注释(没看到哪里用过)
(?=)
解释
如果表达式为“(?=.com)”,意思是:一个字符串后面跟着“.com”才做匹配操作,并不使用任何目标字符串(?!)
解释
如果表达式为“(?!.net)”,意思是:一个字符串后面不是跟着“.net”才做匹配操作(?<=)
解释
如果表达式为“(?<=800-)”,意思是:字符串之前为“800-”才做匹配,假定为电话号码,同样,并不使用任何输入字符串(?<!)
解释
如果表达式为“(?<!192.168.)”,意思是:一个字符串之前不是“192.168.”才做匹配操作,假定用于过滤掉一组 C 类 IP 地址(?:)
功能
表示一个匹配不用保存的分组。解释
当表达式中有圆括号“()”出现时,表示把匹配“()”内规则的字符串,保存成一个分组。保存成分组后,就可以使用 result.group(1) 来访问这个分组。当有多个分组时,就可以使用 result.group(N) 来访问第N个分组。在分组内加“?:”的话(例如:(?:a) ),就表示匹配到“a”后,不把“a”保存到分组中。也就是说 result.group(1) 就取不到这个“a”了。
例子
表达式:(?:https?|ftp)://([^/\r\n]+)(/[^\r\n]*)? 结果1: Match "https://stackoverflow.com/" Group 1: "stackoverflow.com" Group 2: "/" 结果2: Match "https://stackoverflow.com/questions/tagged/regex" Group 1: "stackoverflow.com" Group 2: "/questions/tagged/regex"
(?(id/name)Y|N )
功能:
如果分组所提供的 id 或者 name(名称)存在,就返回正则表达式的条件匹配 Y,如 果不存在,就返回 N;|N 是可选项。解释
当有一个分组被保存后,就可以通过 result.group(1) 取得这个分组的值。在表达式中,可以“(1)”的方式,取出被保存的分组。“?(1)”表示,如果能取到“分组1”,就使用“Y”规则,否则就使用“X”规则。(当然,也可以使用“?(name)”的方式)例子
表达式:(?:x)y 结果1: Match "xy" Full match 0-2 `xy` (没有group(1),也就是说“x”没有被保存到分组内)
.* 或 .+
功能:”.*” 是匹配所有字符,可以一个字符没有;”.+” 是区别所有字符,必须有一个字符。例子:
表达式:.*a 匹配:a 或 1a 不匹配:b 表达式:.+a 匹配:1a 或 aaaaa 不匹配:a
复杂例子:
例子1
表达式:(?:(x)|y)(?(1)y|x) 结果:xy 或 yx 匹配。 xx 或 yy 不匹配。
解释:
(?:(x)|y):匹配“x”或“y”。“?:”代表不把匹配的内容保留到分组里,但因为“x”的两边有括号,所以“x”匹配上后,仍然被保存到了分组里;而“y”没有括号,所以按照“?:”规则,没有保存到分组里。
例子: 表达式:(?:(x)|y) 字符串:x 结果: Full match 0-1 `x` Group 1. 0-1 `x` 字符串:y 结果: Full match 0-1 `y`
从上面的例子可以看出,当是“x”的时候,因为“(x)”的原因,“x”被保存到了“分组1”中,没有受“?:”影响。但当是“y”时候,就没有被保存到分组中,所以结果中也没有“Group 1”.
(?(1)y|x):“?(1)”表示,如果有“1”这个分组的话(如果第一个字符是“x”的话,就匹配上前面的“(x)”,就会有“1”这个分组),第二个要匹配字符必须是“y”;没有“1”这个分组的话,第二个匹配的字符必须是“x”。
正则表达式分析网站:
https://regex101.com/
相关文章推荐
- Python基础--正则表达式基本语法以及re模块
- Python基础教程之正则表达式基本语法以及re模块
- javascript中正则表达式的基础语法
- 正则表达式基础语法
- 前端学PHP之正则表达式基础语法
- [正则表达式]-基础语法四 元字符优先级
- 常用正则表达式及基础语法
- 正则表达式基础语法汇总
- JScript中正则表达式用法详解(附例子:JScript多语言语法加亮引擎)
- 正则表达式--基础语法总结
- 通过例子学习正则表达式(一)--基础知识
- 前端学PHP之正则表达式基础语法
- 正则表达式基础(语法)
- 正则表达式的基础和语法
- 正则表达式的基础语法
- 正则表达式的基础知识-语法
- iOS-----正则表达式的基础语法
- 正则表达式的一些基础语法
- 正则表达式一基础语法
- 正则表达式之一基础语法2