Java正则表达式

一、概述

Java.util.regex包中只有三个类 Matcher、Pattern、PatternSyntaxException

二、简单使用

import java.util.regex.Pattern;

public class Test {
    public static void main(String[] args) {
        String content = "I am noob from runoob.com.";

        String pattern = ".*runoob.*";

        boolean isMatch = Pattern.matches(pattern, content);

        System.out.println("字符串中是否包含了 'runoob' 子字符串? " + isMatch);
    }
}
//捕获组
import java.util.regex.Matcher;
import java.util.regex.Pattern;
 
public class RegexMatches
{
    public static void main( String args[] ){
 
      // 按指定模式在字符串查找
      String line = "This order was placed for QT3000! OK?";
      String pattern = "(\\D*)(\\d+)(.*)";
 
      // 创建 Pattern 对象
      Pattern r = Pattern.compile(pattern);
 
      // 现在创建 matcher 对象
      Matcher m = r.matcher(line);
      if (m.find( )) {
         System.out.println("Found value: " + m.group(0) );
         System.out.println("Found value: " + m.group(1) );
         System.out.println("Found value: " + m.group(2) );
         System.out.println("Found value: " + m.group(3) ); 
      } else {
         System.out.println("NO MATCH");
      }
   }
}

三、Pattern & Matcher

Pattern

static Pattern compile(String regex)
static Pattern compile(String regex, int flags)
flags可包括:
嵌入的方式以括号的形式嵌入原生字符串 "aBC"=> "(?I)AbC"
	CANON_EQ() 			 规范等价,当且仅当完整规范分解匹配
	CASE_INSENSITIVE(?i) 不区分大小写
	COMMENTS(?x) 		 忽略空格和以#开始的行
	DOTALL(?s)			 . 可匹配行结束符
	LITERAL(?m)			 字面值解析,转义序列不具有任何意义
	UNICODE_CASE(?u)	 启用Unicode感知的大小写转换
	MULTILINE()			 启用多行模式,表达式^和$仅分别在行结束符前后后者结尾处匹配	 	
	UNICODE_CHARACTER_CLASS(?U)
	UNIX_LINES(?d)		 启用Unix行模式,只有'\n'被认为是行结束符
int flags()
Matcher matcher(CharSequence input)
static boolean matches(String regex, CHarSequence input)
String pattern()
static String quote(String s) pattern的字面量,可匹配s
string[] split(CharSequence input(, int limit))
	按照匹配之后的分隔符分隔字符串
	limit < 0 可任意长度
	limit = 0 可任意长度但是会去掉末尾空字符串
	limit > 0 输出长度 < limit
Predicate<String> asPredicate() // 待学习 java.util.fuction
Stream<String> splitAsStream(CharSequence input) // java.util.stream

Matcher

int start() 起始字符
int start(int group)
int start(String name)
int end() 匹配字符的下一个位置
int end(int group) 对应的组的匹配字符下一个位置
int end(String groupName) groupName来源于在pattern中前面添加
						 ("?<groupName>originalPattern")
boolean lookingAt() 从第一个字符开始匹配,否则为false
boolean matches() 对整个字符串进行匹配,只有整个字符串匹配才true
boolean hitEnd() true 表示继续输入可能导致之前的匹配更改为一个新的匹配,
					或者之前没有匹配后来有了匹配。
boolean requireEnd() true 继续输入可能导致丢失之前的匹配结果;
					 false表示结果不改变,内容坑可能变。
boolean find() 可以在任意位置
boolean find(int start) 从给定位置开始
Matcher region(int start, int end) 设置匹配范围
int regionEnd() 范围终止位置(exclusive)
int regionStart() 范围起始位置
Matcher reset() 重置region,当前匹配位置等
Matcher reset(CharSequence input) 用新的待匹配字符
String group() 返回匹配的字符group(0),同end
String group(int group)
String group(String name) 同end
int groupCount()
Matcher usePattern(Pattern newPattern) 修改Pattern,丢失matcher信息,
										且维持之前待匹配字符的匹配位置
Matcher useTransparentBounds(boolean b) true表示设置边界后的环视,默认为false
Matcher useAnchoringBounds(boolean b) true表示匹配开头结尾符"^""$",默认为true
String replaceAll(String rep)
String replaceFirst(String rep)
Matcher appendReplacement(StringBuffer sb, String rep) 替换一次并之前的结果,维持位置
Matcher appendTail(String sb) 将替换后的sb末尾加上未匹配字符


四、表达式语法

Java中, \\表示插入一个正则表达式的反斜线,所以其后的字符具有特殊的意义,比如\\d表示一个数字\\\\表示一个普通的反斜杠。

字符说明
\\转义符, \\(表示左括号
^匹配字符串开始的位置,如果设置了multiline属性,还会与\n,\r之后的位置匹配
$匹配字符串结尾的位置,如果设置了multiline属性,还会与\n,\r之前的位置匹配
*零次或多次前面的字符或子表达式,等效于{0,}
+一次或多次,等效于{1,}
?零次或一次,等效于{0,1}, 当?紧跟其他限定词(*,+,{n,m}...)之后,默认非贪心的,"oooo"中,"o+?“只匹配单个"o”
{n}n是非负整数,匹配n
{n,}n是非负整数,至少匹配n
{n,m}m,n是非负整数,n<=匹配次数<=m
.\r,\n之外的任何单个字符
(?:pattern)匹配但不捕获该子表达式(pattern)会捕获,'industr(?:y|ies)'industry|industries' 更经济。注意和下面的区别
(?=pattern)非捕获匹配,'Windows(?=95|98|NT|2000)' 匹配"Windows2000"中的"Windows"后,搜索紧随上一匹配之后
(?!pattern)与上一个相反,不等的情况,形式一样
x|y匹配xy
[xyz]匹配包含的任意一个字符
[^xyz]反向字符集,匹配为包含的字符集
\b匹配一个字边界,"er\b"匹配"never"中的"er",但不匹配"verb"中的"er"
\B非边界字符,与上面相反
\cx匹配x指示的控制字符,\cM匹配Control-M或回车符,x必须是大小写字母
\d数字字符,等效于[0-9]
\D非数字字符
\f换页符,等效于\x0c,\cL
\n换行符, \x0a,\cJ
\r回车符,\x0d,\cM
\t制表符,\x09,\cl
\v垂直制表符,\x0b,\cK
\s匹配任何空白字符,包括空格、字表符、换页符等,与[\f\n\r\t\v]等效
\S非空白符
\w字类字符,等效于[A-Za-z0-9_]
\W非字类字符
\xn匹配n,16进制转移码,n必须两位数例如,"\x41"匹配"A"

参考

  1. RUNOOB
  2. 官方文档
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值