第七章 子表达式
学习目标:
如何运用字表达(subexpression)的概念对表达式进行分组和归类。
7.1 什么是字表达
非换行符空格: (non-breaking space)
7.2 子表达式
子表达是一个更大的表达式的一部分;
把一个表达式划分为一系列子表达式的目的是为了把那些子表达式当做一个独立元素来使用;
子表达式必须用(和)括起来。
备注:(和)是元字符,如果需要匹配(和)本身,就必须使用它的转义序列\(和\)
例子:用正则表达式来查找IP【并没有完全匹配正确的IP地址】
(\d{1,3}.\){3}\d{1,3}
7.3 字表达式的嵌套
子表达式允许嵌套。
事实上,子表达式允许多重嵌套,这种嵌套层次理论上没有限制,但在实际工作中应该遵循适可而止的原则。
备注:把必须匹配的情况考虑周全并写出一个匹配结果符合预期的正则表达式很容易,但把不需要匹配的情况也考虑周全并确保它们都将被排除在匹配结果以外往往要困难的多。
基本思路:在构造一个正则表达式的时候,一定要把你想匹配什么和你不想匹配什么详尽的定义清楚。
例子:用正则表达式来查找合法的IP地址
(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).\){3}((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
一层嵌套:(\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])
二层嵌套:((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5]))
三层嵌套:(((\d{1,2})|(1\d{2})|(2[0-4]\d)|(25[0-5])).\)
备注:在分析各个子表达式的时候,应该按照先内后外的原则来进行而不是从第一个字符开始一个字符一个字符的去尝试。