黑马程序员_java正则表达式
来源:互联网 发布:java字符流写入文件 编辑:程序博客网 时间:2024/06/05 04:19
正则表达式:符合一定规则的表达式。
作用:专门操作字符串。
特点:用一些特定的符号来表示一些代码操作,这样就简化书写。
学习正则表达式,就是在学习一些特殊符号的使用。
好处:可以简化对字符串的复杂操作。
弊端:符号定义越多,正则越长,阅读性极差。
具体操作功能:
1.匹配:String matches()方法
Greedy 数量词
X?
X,一次或一次也没有
X*
X,零次或多次
X+
X,一次或多次
X{n}
X,恰好 n 次
X{n,}
X,至少 n 次
X{n,m}
X,至少 n 次,但是不超过 m 次
字符类
[abc]
a、b 或 c(简单类)
[^abc]
任何字符,除了 a、b 或 c(否定)
[a-zA-Z]
a 到 z 或 A 到 Z,两头的字母包括在内(范围)
[a-d[m-p]]
a 到 d 或 m 到 p:[a-dm-p](并集)
[a-z&&[def]]
d、e 或 f(交集)
[a-z&&[^bc]]
a 到 z,除了 b 和 c:[ad-z](减去)
[a-z&&[^m-p]]
a 到 z,而非 m 到 p:[a-lq-z](减去)
预定义字符类
.
任何字符(与行结束符可能匹配也可能不匹配)
\d
数字:[0-9]
\D
非数字: [^0-9]
\s
空白字符:[ \t\n\x0B\f\r]
\S
非空白字符:[^\s]
\w
单词字符:[a-zA-Z_0-9]
\W
非单词字符:[^\w]
捕获组可以通过从左到右计算其开括号来编号。例如,在表达式 ((A)(B(C))) 中,存在四个这样的组:
1
((A)(B(C)))
2
\A
3
(B(C))
4
(C)
2.切割:String split()
按照多个空格来切
“ +”即空格加上“+”表示一次或多次
按照点来切
“\\.”必须加上两个转义字符
按照\\来切
“\\\\”必须是四个
按照叠词来切割
“(.)\\1”
为了可以让规则的结果被重用,可以将规则封装成一个组。
用( )完成,组的出现都有编号。
从1开始,想要使用已有的组可以用\n(n就是组的编号)的形式来获取。
判断表达式有多少个组可以用左括号来判断,一个左括号代表一个组,
从左往右数,左边第一个左括号,即为第一个组,
以此类推。
3.替换:String replaceAll()
把5个以上的数字装换成#
String s = s.replaceAll(“\\d{5,}”,”#“)
把叠词替换成&
String s = s.replaceAll(“(.)\\1+”,”&”)
把重叠的字符替换成单个字字符如:zzzz===>z
String s = s.replaceAll(“(.)\\1+”,”$1”)用$获取组的字符,1代表第一个组。
4.获取:
把规则封装成对象:Pattern p = Pattern.compile(regex);
让正则对象和要作用的字符串相关联,获取匹配器对象
Matcher m = p.matcher(str);
Syso(m.matcher);得到boolean型的值
其实Sting类中的matcher方法,用的就是Pattern和Matcher的对象来完成,只不过被String的方法封装后,用起来较为简单,但是功能单一。
While(m.find())
{
Syso(m.group());
}
find():查找与模式相匹配的子串
group():返回所匹配的子串
如果m.matcher先匹配,再使用m.find();
会从m.matcher匹配后的子串查找,
如:有10个字符,matcher读到了第三个字符,返回false后,
find()会从第四个字符开始查找。
边界匹配器
^
行的开头
$
行的结尾
\b
单词边界
\B
非单词边界
\A
输入的开头
\G
上一个匹配的结尾
\Z
输入的结尾,仅用于最后的结束符(如果有的话)
\z
输入的结尾
四种功能到底使用哪一个?或者哪几个?
思路方式:
1.如果只是想知道该字符是否对或错,使用匹配。
2.想要将已有的字符串变成另一个字符串,使用替换。
3.想要按照自定的方式把字符串变成多个字符串。使用切割,获取规则以外的子串。
4.想要拿到符合需求的字符串子串,使用获取。获取符合规则的字符串。
示例:
写一个正则表达式,可以匹配尾号5连的手机号。
规则: 第1位是1,第二位可以是数字3458其中之一,后面4位任意数字,最后5位为任意相同的数字。
例如:18601088888、13912366666
代码:
package com.itheima;import java.util.Scanner;import java.util.regex.Matcher;import java.util.regex.Pattern;public class Test6 {public static void main(String[] args) {//思路:后五位为任意相同数字则需要用到组//输入提示System.out.println("请输入手机号:");//键盘录入一个手机号Scanner in = new Scanner(System.in);//用字符串接收String str = in.nextLine();//写正则表达式String regx="1[3458]\\d{4}(\\d)\\1{4}";//把规则封装成对象Pattern p = Pattern.compile(regx);//判断字符串是否符合规则Matcher m = p.matcher(str);//输出判断结果System.out.println("结果为:"+m.matches());}}
- 黑马程序员_java正则表达式
- 黑马程序员_java正则表达式
- 黑马程序员_java 正则表达式
- 黑马程序员_java正则表达式
- 黑马程序员_java 正则表达式
- 黑马程序员_Java正则表达式
- 黑马程序员_Java正则表达式
- 黑马程序员_JAVA:正则表达式
- 黑马程序员_java正则表达式
- 黑马程序员_java正则表达式
- 黑马程序员_Java基础_正则表达式
- 黑马程序员_java正则表达式学习
- 黑马程序员_java入门_正则表达式
- 黑马程序员_java基础-正则表达式
- 黑马程序员_Java基础_正则表达式
- 黑马程序员_Java正则表达式学习笔记
- 黑马程序员_java基础_正则表达式
- 黑马程序员_Java学习日记21_正则表达式
- 学习笔记9:Scala外部类和内部类
- 面向 Perl 开发人员的 XML,第 2 部分: 使用到 Perl 的高级 XML 解析技术
- 克隆后手动设置IP启动网卡报错
- 一些OJ的排序题(冒泡排序的一般形式)
- 排序算法——堆排序
- 黑马程序员_java正则表达式
- ViewPage详解
- 管理系统UI之四:使用全屏沉浸模式(Using Immersive Full-Screen Mode)
- DOS下for循环运用
- HTML+CSS+JavaScript基础知识
- android 编程规范
- grep正则表达
- 链表的应用~
- [UnityUI]循环滑动列表