【Java学习笔记】13.正则表达式
来源:互联网 发布:江苏警方破获网络诈骗 编辑:程序博客网 时间:2024/04/28 06:12
1.正则表达式语法
1.正则表达式:符合一定规则的字符串
**
将下一字符标记为特殊字符、文本、反向引用或八进制转义符。例如,”n”匹配字符”n”。”\n”匹配换行符。序列”\”匹配”\”,”(“匹配”(“。
^
匹配输入字符串开始的位置。如果设置了 RegExp 对象的 Multiline 属性,^ 还会与”\n”或”\r”之后的位置匹配。
$
匹配输入字符串结尾的位置。如果设置了 RegExp 对象的 Multiline 属性,$ 还会与”\n”或”\r”之前的位置匹配。
*
零次或多次匹配前面的字符或子表达式。例如,zo* 匹配”z”和”zoo”。* 等效于 {0,}。
+
一次或多次匹配前面的字符或子表达式。例如,”zo+”与”zo”和”zoo”匹配,但与”z”不匹配。+ 等效于 {1,}。
?
零次或一次匹配前面的字符或子表达式。例如,”do(es)?”匹配”do”或”does”中的”do”。? 等效于 {0,1}。
{n}
n 是非负整数。正好匹配 n 次。例如,”o{2}”与”Bob”中的”o”不匹配,但与”food”中的两个”o”匹配。
{n,}
n 是非负整数。至少匹配 n 次。例如,”o{2,}”不匹配”Bob”中的”o”,而匹配”foooood”中的所有 o。”o{1,}”等效于”o+”。”o{0,}”等效于”o*”。
{n,m}
M 和 n 是非负整数,其中 n <= m。匹配至少 n 次,至多 m 次。例如,”o{1,3}”匹配”fooooood”中的头三个 o。’o{0,1}’ 等效于 ‘o?’。注意:您不能将空格插入逗号和数字之间。
?
当此字符紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后时,匹配模式是”非贪心的”。”非贪心的”模式匹配搜索到的、尽可能短的字符串,而默认的”贪心的”模式匹配搜索到的、尽可能长的字符串。例如,在字符串”oooo”中,”o+?”只匹配单个”o”,而”o+”匹配所有”o”。
.
匹配除”\r\n”之外的任何单个字符。若要匹配包括”\r\n”在内的任意字符,请使用诸如”[\s\S]”之类的模式。
x|y
匹配 x 或 y。例如,’z|food’ 匹配”z”或”food”。’(z|f)ood’ 匹配”zood”或”food”。
2.Pattern类
(1) 8种模式:比如启用多行模式,启用unix模式等,eg int CASE_INSENSITIVE表示启用不区分大小写的模式。
(2) 4个静态方法
两个单例模式构造器:
Pattern compile(String regex);
Pattern compile(String regex,int flags)flags为八种模式的一种
eg2:
Pattern p=Pattern.compile(“[a-z]\s[a-z]”);
Matcher m=p.matcher(“b c”);
if(m.matches()) Sysout(1111);
else Sysout(2222); 输出结果为1111;
一个匹配方法,一个返回String的字面值模式方法:
boolean matches(String regex,CharSequence input);//input与regex匹
配返回true。
String quote(String s);//返回指定String的字面值。
eg3:boolean bool=Pattern.matches(“[a-z] [a-z]”,”bc”); //结果为true
Sysout(Pattern.quote(“a_#/tb”));//输出结果为 “\Qa_# b”\E
(3) 6个普通方法
返回此模式的匹配器: Matcher matcher(CharSequence input);
返回此模式的标志: int flags();
返回此模式的regex: String pattern();
两个字符串切割方法: String[] split(CharSequence input);
String[] split(CharSequence input,intlimit);
limit为返回字符串的个数,如果等于0,返回所有拆分的字符串,如果大于拆分字符串的实际个数,返回实际个数。
toString方法: String toString();
3.示例
1.例如:案例:键盘录入qq号码,校验QQ号码。
需求:
1:要求必须是5-15位数字
2:0不能开头
import java.util.Scanner;/** * 案例: 键盘录入qq号码,校验QQ号码。 * 需求: 1:要求必须是5-15位数字 * 2:0不能开头 */public class RegexDemo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); // 键盘录入qq号码 System.out.println("请输入您的qq号码"); // 获取录入数据 String qq = sc.nextLine(); //创建方法,里面使用正则表达式实现 System.out.println(isCheck2(qq)); } private static boolean isCheck2(String qq) { //定义正则表达式 String reg = "[1-9][0-9]{4,14}"; return qq.matches(reg); }}
2.校验电话号码
public class RegexDemo { public static void main(String[] args) { // 校验电话号码 /* * 13245678901 13332345678 13456789012 18812345678 18999999999 * 18666666666 18786868686 */ //定义正则表达式 String reg = "1[38][0-9]{9}"; //System.out.println("键盘输入电话号码"); String number = "13245678901"; System.out.println(number.matches(reg)); }}
3.切割字符串
import java.util.Arrays;/* * 我有如下一个字符串:”91 27 46 38 50” 请写代码实现最终输出结果是:”27 38 46 50 91” */public class SplitExercise { public static void main(String[] args) { String str = "91 27 46 38 50"; //设定正则表达式 String reg = " "; //运用split方法切割 String[] strs = str.split(reg); //将String数组转换为int数组并排序 int[] arr = new int[strs.length]; for (int i = 0; i < arr.length; i++) { arr[i] = Integer.parseInt(strs[i]); } //排序 Arrays.sort(arr); //将int[]转换为StringBuffer StringBuffer sb = new StringBuffer(); for (int i = 0; i < arr.length; i++) { sb.append(arr[i]+" "); } //将StringBuffer转换为String System.out.println(sb.toString()); }}
- 【Java学习笔记】13.正则表达式
- Java学习笔记----正则表达式
- Java学习笔记-正则表达式
- java学习笔记---正则表达式
- java 正则表达式-学习笔记
- JAVA学习笔记-正则表达式
- Java正则表达式学习笔记
- java正则表达式学习笔记
- java正则表达式学习笔记
- Java 正则表达式学习笔记
- [学习笔记]Java正则表达式
- JAVA正则表达式---学习笔记
- Java正则表达式学习笔记
- [学习笔记]Java正则表达式
- JAVA学习笔记-----正则表达式
- 黑马程序员——学习笔记13.Java正则表达式
- java正则表达式学习笔记(一)
- java正则表达式学习笔记(二)
- Java继承中概念的混淆
- Mapped Statements collection does not contain value for
- BZOJ1513: [POI2006]Tet-Tetris 3D 二维线段树
- x265与HM编码性能对比
- HDU
- 【Java学习笔记】13.正则表达式
- 2017春电赛FPGA基本任务一实验报告
- (转)快与慢(上):AI应用于投资领域的现状与未来
- 1032. 挖掘机技术哪家强
- WebSocket 编译指南
- hdu 2015 偶数求和
- Hibernate5 Unknown entity错误解决方法
- MD5加密-java代码
- Linux3