Java正则表达式
详细了解可以参考java.util.regex包下面的相关的类。
正则表达式(regular expression)定义了字符串的模式。
正则表达式可以用来搜索、编辑或处理文本。
正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。
正则表达式实例
一个字符串其实就是一个简单的正则表达式,例如 Hello World 正则表达式匹配 “Hello World” 字符串。
.(点号)也是一个正则表达式,它匹配任何一个字符如:”a” 或 “1”。
元字符
正则表达式是含有一些具有特殊意义的字符串,这些特殊字符串称为正则表达式的元字符。例如, “\d”,表示数字0~9中的任何一个,“\d”就是元字符。
提示:。对java的解释器来说,在反斜线字符( \ )前的字符有特殊的含义。在java中,与regex有关的包,并不都能理解和识别反斜线字符( \ ),尽管可以试试看。但为避免这一点,即为了让反斜线字符( \ )在模式对象中被完全地传递,应该用双反斜线字符( \ )。
常用元字符表
元字符 | 意义 |
---|---|
.(点) | 表示除了换行符之外任意一个字符 |
\s | 空白字符(空格键、tab、换行、回车) |
\S | 非空格字符([^\s]) |
\d | 任意一个数字,相当于[0-9]) |
\D | 一个非数字的字符,(相当于[^0-9]) |
\w | 代表可用作标识符的字符,但不包括“$” |
\W | 代表不可用于标识符的字符 |
定位符
符号 | 意义 |
---|---|
^ | 一行的开始 |
$ | 一行的结尾 |
\b | 一个单词的边界 |
\B | 一个非单词的边界 |
说明:在正则表达式中点号“.”代表任何一个字符,因此在正则表达式中如果想使用普通意义的点字符”.”,必须使用转义字符”\”(双写)。同样,圆括号在正则表达式中需要区别对待,如果想使用普通意义的的圆括号(即被用来判断的字符串中包含圆括号),则需要在圆括号(两个都需要)前加双反斜杆。连接符号“-“也有着特殊的意义,它表示一个范围,表示普通意义时也要使用转义字符
在正则表达式中可以使用方括号括起来若干个字符来表示一个元字符,该元字符代表括号中的任何一个字符。例如,reg=”[abc]4”,这样字符串a4,b4,c4都是和正则表达式匹配的字符串。方括号元字符还可以为其他格式。如:
- [^456]:代表4、5、6之外的任何字符
- [a-r]:代表a~r中的任何一个字母
- [a-zA-Z]:可代表任意一个英文字母。
- [a-e[g-z]]:代表a~e,或g~z中的任何一个字母(并运算)
- [a-o&&[def]]:代表字母d、e、f(交运算)
- [a-d&&[^bc]]:代表字母a、d(差运算)
限定修饰符
在正则表达式中允许使用限定修饰符来限定元字符出现的次数。如,”A*”代表A可在字符串中出现0次或多次。用法如下(理解这里重复的含义,是连续的):
限定修饰符 | 意义 | 示例 |
---|---|---|
? | 0次或1次 | A? |
* | 重复0次或多次 | A* |
+ | 重复1次或多次 | A+ |
{n} | 重复出现正好n次 | A{2} |
{n,} | 至少重复出现n次 | A{3,} |
{n,m} | 重复出现n~m次 | A{2,6} |
中文字符的匹配
正则表达式支持Unicode码,汉字范围可使用Unicode来表示
[\u4E00-\u9FA5]:汉字
[\uFE30-\uFFA0]:全角字符
[^\x00-\xff]:匹配双字节字符(包括汉字在内)
中文字符的匹配例子
String regex="[\\u4E00-\\u9FA5]+.*"; //以中文汉字开头
String str="你好,World";
str.matches(regex);