正则表达式语法简介
正则表达式是独立于任何语言的,虽然不同的语言中其语法略有不同。
正则表达式的语法可以分为
• 特殊字符
• 边界匹配符
• 逻辑操作符
• 量词等
这些基本的语法规则合成使用,共同构成了正则表达式强大的表示和匹配功能
一般字符的语法在前一节已经介绍过(例如字符i)
特殊字符的表达
例如,如果我们要查找一个字符串,这个字符串中至少包含两行(两行可以不相邻),前面
一行中存在两个制表符,它们中间仅仅隔一数字,后面一行中至少有一个制表符,则正则表
达式可以这样写:
• String regexString = “.\t\d\t.\n.\t.”(其中的.表示任意多个非换行字符)
• 注意:正则表达式原文是“.\t\d\t.\n.\t.*” ,双反斜杠中前一反斜杠是Java对反斜杠的转义。
边界匹配符
例如,如果我们要判断一个完整文本中是否存在完整的一行"This is a complete line",且行中没有其它任何字符,则可以如下的正则表达式:
• String regexString = “^This is a complete line$”
• 其中的 ^ 和 $ 界定了行的起始和终止,中间的信息必须完整匹配才可以。
逻辑操作符
例如,假设十六进制的表示字符是由数字和A-F这6个大写字母构成。我们知道一个字节可以用 2位的16进制表示,下面这个正则表达式要判断一个字节转换成十六进制之后的表示是不是正确:
• String regexString = “[0-9A-F][0-9A-F]”
字符串“ AE”, “30”, “6G”, “7E0”, “0A”匹配这个模式的结果分别是:T, T, F, F, T。其实这个需求还有更简单的实现方法,我们将在量词中介绍。
量词
量词 描述了一个模式怎样吸收输入的文本:
- 贪婪型:量词是贪婪的,除非有别的设定。否则,贪婪型模式就要尽可能地发现更多的匹配。
- 勉强型:用问号指定。这个量词需要满足匹配的最少字符数。
- 占有型:目前,只有Java语言可用,属于Java特殊语法,主要用途是防止失配时回溯。在简单的正则表达式中很少使用。
例如,判断一个字节的十六进制表示是否正确可以用下面的正则表达式:
• String regexString = “[0-9A-F]{2}”
判断一个字符串表示的数值是不是一个(0, 1亿)之间的整数,可用:
• String regexString = “[1-9]//d{0,7}”