Java学习笔记_正则的学习及使用

来源:互联网 发布:淮海战役 知乎 编辑:程序博客网 时间:2024/06/04 18:59

一、什么是正则?

1、概念

正则表达式(regular expression)就是普通字符(例如a到z)以及特殊字符(称为元字符)组成的一种字符串匹配模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个条件的子串等。

(1)格式:起始(“^”若不写则表示匹配子串)、单个类型、类型个数、结束(“$”若不写则表示匹配子串)

例1:^[a-zA-Z0-9_]{0,1}$//意义:该字符串只能有1个或者没有字会串,并且包含只能是大小写字母、数字和下划线。

例2:[0-9]{1}//意义:子串中只能含有数字,并且只能是一个字符

(2)变形:由于字母数字下划线这种格式应用广泛,于是为了便与书写,添加了许多简化形式。

例1变形:^[\w]?$

例2变形:\d

2、需要知道的常用标识符(不常用的可以去百度搜索)

(1)\:将下一个字符标记为一个特殊字符(原义字符、向后引用、八进制)

例:"\n"表示匹配换行符,“\\”匹配"\",“\("匹配"("

特殊字符包括:^ $ * + ? { } ( ) [ ] \ / . |

(2)^:匹配输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也匹配'\n'或'\r'之后的位置。

(3)$:匹配输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配'\n'或'\r'之前的位置。

(4)*:零次或多次(任意次),等价于{0,}

(5)+:1次或多次,等价于{1,}

(6)?:0次或1次,等价于{0,1}

(7){n}:n是一个非负整数。匹配确定的n次。例如,‘o{2}'可匹配"food"但不可匹配"Bob"

(8){n,}:n是一个非负整数。至少匹配n次,例,'o{2,}'可匹配"foooood"但不可匹配"Bob"。

注:'o{1,}'等价于'o+','o{0,}'等价于'o*'

(9){n,m}:m和n均为非负整数,其中n<=m。最少匹配n次且最多匹配m次。

例如,“o{1,3}"将匹配"foooood"中的前三个。

注:在逗号和两个数之间不能有空格。

(10).:点可匹配除"\n"之外的任何单个字符。要匹配包括'\n'在内的任何字符,可使用'[\n]'的模式。

(11)x|y:匹配x或y。“|”代码“或”的意思。

例:‘z|food'能匹配“z"或"food"。‘(z|f)ood‘则匹配"zood"或"food"。

(12)[xyz]:匹配所包含的任意一个字符。例如,'[abc]'可以匹配"button"中的'b'。

(13)[a-z]:字符范围。匹配指定范围内的任意字符。例如,'[a-z]'可以匹配'a'到'z'范围内的任意小写字母字符。

(14)[^]:非,以(13)和(14)为例,

例1:'[^abc]'可以匹配"button"中的'u'或't'或'o'或'n'

例2:'[^a-z]'可以匹配“abc12”字符串中'1'或'2'

(15)\d:匹配一个数字字符。等价于[0-9]

(16)\D:匹配一个非数字字符。等价于[^0-9]

(17)\w:等价于'[A-Za-z0-9_]'

二、Java使用正则的方式

1、自带的字符串拆分方法split()(注:同一个符串,只算前面不算后面,注意下面示例结果的个数)

import java.util.Arrays;public class 正则 {public static void main(String[] args) {String data = "||ab|3|cfs|sd||";String[] arr = data.split("\\|");System.out.println(Arrays.asList(arr));//打印结果为:[, , ab, 3, cfs, sd]}}

2、自定义正则表达式

import java.util.regex.Matcher;import java.util.regex.Pattern;public class 正则 {public static void main(String[] args) {Pattern mPattern = Pattern.compile("z|[food]");// 正则式Matcher match = mPattern.matcher("food");// 匹配内容Boolean flag = match.matches();System.out.println("flag-->" + flag);// Boolean flag = match.find();//尝试查找下一个匹配模式的字符串序列。}}

三、其它用途及注意事项

1、软件支持正则查询时可写语句搜索。

例:模糊查询,批量替换。示例:查找1、或2、或3、之类的标题,利用正则可方便进行查找或替换。^o^
步骤:文本文件用EditPlus打开---->Ctrl+F查找---->勾上正则表达式---->输入公式然后查找。

2、元字符优先级顺序(从高到低,从左到右)

(1)\    转义字符
(2)()   圆括号, []  方括号
(3)*  +   ?  {n}  {n,}  {n,m}  限定符
(4)^  $  开始和结束标识
(5)|   "或"操作

3、简单了解编码中的正则

[A-Z]可写成[\x41-\x5A](ASCII编码)

[0-9]可以写成[\x30-\x39];(ASCII编码)

[a-z]可以写成[\x61-\x7A];(ASCII编码)

中文正则:[\u4E00-\u9FA5](unicode编码)

四、拿来主义,贴上常用的正则匹配公式。

中文字符:^[\u4E00-\u9FA5]+$
手机号码:^(86)?0?1\d{10}$
电话号码:^((d{3,4})|d{3,4}-)?d{7,8}$”
Email地址:^[\w-]+[\w-.]?@[\w-]+\.{1}[A-Za-z]{2,5}$
URL网址:^http://([w-]+.)+[w-]+(/[w-./?%&=]*)?$
密码(安全级别中):^(\d+[A-Za-z]\w*|[A-Za-z]+\d\w*)$
密码(安全级别高):^(\d+[a-zA-Z~!@#$%^&(){}][\w~!@#$%^&(){}]*|[a-zA-Z~!@#$%^&(){}]+\d[\w~!@#$%^&(){}]*)$

匹配特定数字:
^[1-9]d*$    //匹配正整数
^-[1-9]d*$   //匹配负整数
^-?[1-9]d*$   //匹配整数
^[1-9]d*|0$  //匹配非负整数(正整数 + 0)
^-[1-9]d*|0$   //匹配非正整数(负整数 + 0)
^[1-9]d*.d*|0.d*[1-9]d*$   //匹配正浮点数
^-([1-9]d*.d*|0.d*[1-9]d*)$  //匹配负浮点数
^-?([1-9]d*.d*|0.d*[1-9]d*|0?.0+|0)$  //匹配浮点数
^[1-9]d*.d*|0.d*[1-9]d*|0?.0+|0$   //匹配非负浮点数(正浮点数 + 0)
^(-([1-9]d*.d*|0.d*[1-9]d*))|0?.0+|0$  //匹配非正浮点数(负浮点数 + 0)

匹配特定字符串:
^[A-Za-z]+$  //匹配由26个英文字母组成的字符串
^[A-Z]+$  //匹配由26个英文字母的大写组成的字符串
^[a-z]+$  //匹配由26个英文字母的小写组成的字符串
^[A-Za-z0-9]+$  //匹配由数字和26个英文字母组成的字符串
^w+$  //匹配由数字、26个英文字母或者下划线组成的字符串

整数或者小数:^[0-9]+\.{0,1}[0-9]{0,2}$
只能输入数字:"^[0-9]*$"。
只能输入n位的数字:"^\d{n}$"。
只能输入至少n位的数字:"^\d{n,}$"。
只能输入m~n位的数字:。"^\d{m,n}$"
只能输入零和非零开头的数字:"^(0|[1-9][0-9]*)$"。
只能输入有两位小数的正实数:"^[0-9]+(.[0-9]{2})?$"。
只能输入有1~3位小数的正实数:"^[0-9]+(.[0-9]{1,3})?$"。
只能输入非零的正整数:"^\+?[1-9][0-9]*$"。
只能输入非零的负整数:"^\-[1-9][]0-9"*$。
只能输入长度为3的字符:"^.{3}$"。
只能输入由26个英文字母组成的字符串:"^[A-Za-z]+$"。
只能输入由26个大写英文字母组成的字符串:"^[A-Z]+$"。
只能输入由26个小写英文字母组成的字符串:"^[a-z]+$"。
只能输入由数字和26个英文字母组成的字符串:"^[A-Za-z0-9]+$"。
只能输入由数字、26个英文字母或者下划线组成的字符串:"^\w+$"。
验证用户密码:"^[a-zA-Z]\w{5,17}$"正确格式为:以字母开头,长度在6~18之间,只能包含字符、数字和下划线。
验证是否含有^%&',;=?$\"等字符:"[^%&',;=?$\x22]+"。
只能输入汉字:"^[\u4e00-\u9fa5]{0,}$"
验证Email地址:"^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$"。
验证InternetURL:"^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$"。
验证电话号码:"^(\(\d{3,4}-)|\d{3.4}-)?\d{7,8}$"
正确格式为:"XXX-XXXXXXX"、"XXXX-XXXXXXXX"、"XXX-XXXXXXX"、"XXX-XXXXXXXX"、"XXXXXXX"和"XXXXXXXX"。
验证身份证号(15位或18位数字):"^\d{15}|\d{18}$"。
验证一年的12个月:"^(0?[1-9]|1[0-2])$"正确格式为:"01"~"09"和"1"~"12"。
验证一个月的31天:"^((0?[1-9])|((1|2)[0-9])|30|31)$"正确格式为;"01"~"09"和"1"~"31"。
匹配中文字符的正则表达式: [\u4e00-\u9fa5]
匹配双字节字符(包括汉字在内):[^\x00-\xff]
匹配空行的正则表达式:\n[\s| ]*\r
匹配html标签的正则表达式:<(.*)>(.*)<\/(.*)>|<(.*)\/>
匹配首尾空格的正则表达式:(^\s*)|(\s*$)

0 0