正则表达式

Java中的 \ 具有特殊意义--所以\\d表示数字 普通的反斜杠\\\\

正则表达式在Java中的用法

String自带(底层也是Pattern)

1、boolean isMatch = "-1234.56".matches("-?\\d+");//false

//split 将字符串从正则表达式匹配的地方切开

2、String[] arrStr = "I am iron man".split("\\W+");//\\W表示非单词字符 I, am, iron, man

public String[] split(String regex, int limit)//limit控制模式应用的次数,参数非正则匹配最多,否则执行limit-1次

3、public String replaceFirst(String regex, String replacement)

public String replaceAll(String regex, String replacement)

匹配java.util.regex.Pattern

Pattern p = Pattern.complie(String regix);//根据传入的正则表达式编译得到模式
p.split(CharSequence,int);//int可选(匹配几次的意思int-1);==string.split
Matcher m = p.matcher(CharSequence toMatchStr);//传入待匹配的字符
Boolean isNext = m.find();//尝试查找与该模式匹配的输入序列的下一个子序列。
//重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列
Boolean isNext = m.find(int);
Boolean isAllMatch = m.matches();
//与 matches 方法类似,此方法始终从区域的开头开始;与之不同的是,它不需要匹配整个区域。 
Boolean isAllMatch = m.lookingAt();
String bingoStr = m.group();//返回匹配的串
m.reset(String);//替换掉p.matcher中传入的参数

Matcher的替换操作

public String replaceAll(String replacement)
public String replaceFirst(String replacement)//替换掉第一个匹配成功的部分

//渐进式替换 替换并把匹配到的位置之前的添加到sb后面

public Matcher appendReplacement(StringBuffer sb, String replacement)

//调用一次或多次appendReplacement后,用此方法把输入字符串余下的部分复制到sb

public StringBuffer appendTail(StringBuffer sb)
字符
B指定字符B
\xhh十六进制值为oxhh的字符
\uhhhh十六进制表示为oxhhhh的Unicode字符
\t制表符Tab
\n换行符
\r回车
\f换页
\e转义(Escape)
字符类
.任意字符
[abc]包含a、b、c的任何字符==a|b|c
[^abc]除了a、b、c之外的任何字符
[a-zA-Z]从a到z或从A到Z的任何字符
[abc[hij]]==a|b|c|h|i|j
[a-z&&[hij]]任意h、i、j(交集)
\s空白符(空格、tab、换行、换页和回车)
\S非空白符
\d数字[0-9]
\D非数字[^0-9]
\w词字符[a-zA-Z0-9]
\W非词字符[^\w]
逻辑操作符
XYY在X后面
X|YX或Y
(X)捕获组,可以在表达式中用\i引用第i个捕获组
 边界匹配符 
^一行的起始
$一行的结束
\b词的边界
\B非词的边界
\G前一个匹配的结果

 

A(B(C))D 组0是ABCD 1是BC 2是C

量词:描述一个模式吸收输入文本的方式

  1. 贪婪型:除非有其他的选项被设置,贪婪表达式会为所有可能的模式发现尽可能多的匹配
  2. 勉强型:用 ? 指定,匹配满足模式所需要的最少字符数
  3. 占有:(Java专属),用 + 指定 当正则表达式被应用于字符串时,它会产生相当多的状态,以便在匹配失败时可以回溯,占有型量词不会保存这些中间状态,因此可以防止回溯,被用于防止正则表达式失控,使正则表达式执行起来更有效
贪婪型勉强型占有型如何匹配
X?X??X?+一个或零个X
X*X*?X*+零个或多个X
X+X+?X++一个或多个X
X{n}X{n}?X{n}+恰好n次X
X{n,}X{n,}?X{n,}+至少n次X
X{n,m}X{n,m}?X{n,m}+X至少n次,至多m次
(X若为表达式用括号括起来)如(abc)+

正则表达式--CharSequence(被CharBuffer、String、StringBuffer、StringBuilder实现)

interface CharSequence{

    charAt(int i);
    length()
    subSequence(int start, int end);
    toString();

}

构造函数

public static Pattern compile(String regex, int flags) flags可选表示的含义  可以用|使用多个

编译标记效果
Pattern.CANON_EQ两个字符当且仅当它们的完全规范分解相匹配时,就认为它们是匹配的
Pattern.CASE_INSENSITIVE不区分大小写
Pattern.COMMENTS

空格、注释(#)被忽略 COMMENTS

(?x) 也可以启用注释模式

Pattern.DOTALL

可以匹配任何字符,包括行结束符。默认情况下,此表达式不匹配行结束符 通过嵌入式标志表达式 (?s) 也可以启用 dotall 模式

Pattern.MULTILINE多行模式,

在多行模式中,表达式 ^ 和 $ 仅分别在行结束符前后匹配,或者在输入序列的结尾处匹配。默认情况下,这些表达式仅在整个输入序列的开头和结尾处匹配。(?m)

Pattern.UNICODE_CASE

启用 Unicode 感知的大小写折叠 指定此标志后,由 CASE_INSENSITIVE 标志启用时,不区分大小写的匹配将以符合 Unicode Standard 的方式完成。默认情况下,不区分大小写的匹配假定仅匹配 US-ASCII 字符集中的字符。(?u)也可以启动

Pattern.UNXI_LINES

启用 Unix 行模式。

在此模式中,.、^ 和 $ 的行为中仅识别 '\n' 行结束符。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值