正则表达式的规则

A:字符

    x 字符 x。举例:'a'表示字符a

    \\ 反斜线字符。

    \n 新行(换行)符 ('\u000A') 

    \r 回车符 ('\u000D')

 

B:字符类

    [abc] a、b 或 c(简单类) 

    [^abc] 任何字符,除了 a、b 或 c(否定) 

    [a-zA-Z] a到 z 或 A到 Z,两头的字母包括在内(范围) 

    [0-9] 0到9的字符都包括

 

C:预定义字符类

    .     任何字符。我的就是.字符本身,怎么表示呢?  \.

    \d  单个数字:[0-9]

    \w  单词字符:[a-zA-Z_0-9]

    在正则表达式里面组成单词的东西必须有这些东西组成

 

D:边界匹配器

    ^ 行的开头 

    $ 行的结尾 

    \b 单词边界

        就是不是单词字符的地方。

        举例:hello world?haha;xixi

 

E:Greedy 数量词 

    X?     X,一次或一次也没有    1=X || 0=X

    X*     X,零次或多次    0=X || 1+ =X

    X+     X,一次或多次    1=X || 1+ =X

        System.out.println("546984".matches("3+"));    false

        System.out.println("13".matches("3+"));    false

        System.out.println("3".matches("3+"));    true

        System.out.println("3333".matches("3+"));    true

 

    X{n} X,恰好 n 次     n=X

        System.out.println("546984".matches("3{2}"));    false

        System.out.println("543384".matches("3{2}"));    false

        System.out.println("3333 ".matches("3{2}"));    fasle

        System.out.println("33".matches("3{2}"));    true

 

    X{n,} X,至少 n 次     [ ~    n=<X

    X{n,m} X,至少 n 次,但是不超过 m 次      [)     n=<X<=m 

 

字符类

字符类可以出现在其他字符类中,并且可以包含并集运算符(隐式)和交集运算符 (&&)。并集运算符表示至少包含其某个操作数类中所有字符的类。交集运算符表示包含同时位于其两个操作数类中所有字符的类。

字符类运算符的优先级如下所示,按从最高到最低的顺序排列:

1    字面值转义    \x
2    分组[...]
3    范围a-z
4    并集[a-e][i-u]
5    交集[a-z&&[aeiou]]

 

Pattern类的重要方法:

public static Patterncompile(String regex,int flags):将给定的正则表达式编译到具有给定标志的模式中。
public Matchermatcher(CharSequence input):创建匹配给定输入与此模式的匹配器。 
public static boolean matches(String regex, CharSequence input):编译给定正则表达式并尝试将给定输入与其匹配。 

matcher的重要方法:

public boolean find():尝试查找与该模式匹配的输入序列的下一个子序列。
public boolean find(int start):重置此匹配器,然后尝试查找匹配该模式、从指定索引开始的输入序列的下一个子序列。 
public int start():返回以前匹配的初始索引。 
public int end():返回最后匹配字符之后的偏移量。 


用Java正则去掉字符串中重复出现的字符:

abcde 顺序可以不一样,也就是去掉重复出现的字符

String str = "abcdeabcdeabcdeaaaaaadddddceeeeabcccccccacadaeec"; 

str = str.replaceAll(reg, ""); 

System.out.println(str); 

 

str = str.replaceAll("(?s)(.)(?=.*\\1)", ""); 

 

(?s)(.)(?=.*\1) 

(?s) 开启单行模式 DOTALL 让. 号匹配任意字符 

(.) 任意字符 并捕获在第一组 

(?=.*\1) 这是断言, 表示后面内容将是 任意个字符加上第一组所捕获的内容 

这样子,如果这整个式子匹配到,表示,第一个捕获组内容在字符串中,至少出现两次,替换为 "" 空串. 

进行 全局替换后, 整个字符串所出现的字符将不重复。

 

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值