第十五章 Java正则表达式


Java 正则表达式和 Perl 的是最为相似的。

java.util.regex 包主要包括以下一个接口三个类:

Pattern 类:
pattern 对象是一个正则表达式的编译表示。Pattern 类没有公共构造方法。要创建一个 Pattern 对象,你必须首先调用其公共静态编译方法,它返回一个 Pattern 对象。该方法接受一个正则表达式作为它的第一个参数。

Matcher 类:
Matcher 对象是对输入字符串进行解释和匹配操作的引擎。与Pattern 类一样,Matcher 也没有公共构造方法。你需要调用 Pattern 对象的 matcher 方法来获得一个 Matcher 对象。

PatternSyntaxException:
PatternSyntaxException 是一个非强制异常类,它表示一个正则表达式模式中的语法错误。

MatchResult接口

所有已知实现类:
Matcher
版本开始:
JDK 1.5
public interface MatchResult
匹配操作的结果。
此接口包含用于确定与正则表达式匹配的结果的查询方法。比赛的界限,组和组的边界可以看出,但通过MatchResult不改。

IdModifier and TypeMethodDescription
1intend()返回最后一个字符匹配的偏移量。
2intend(int group)返回偏移后序列捕获的组在本场比赛的最后一个字符。
3Stringgroup()返回由以前的匹配输入序列。
4Stringgroup(int group)返回被给定组以前的匹配操作在输入序列。
5intgroupCount()返回在这个匹配结果的模式中捕获组的数量。
6intstart()返回匹配的开始索引。
7intstart(int group)返回序列捕获的组在这场比赛开始指数。

正则表达式的高级应用

详细查看JDK1.8的API,java.util.regex包下pattren类

package com.bennett.test1007;

import java.util.Arrays;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class RegexTest2 {
	public static void main(String[] args) {
//		test1();
//		test2();
//		test3();
//		test4();
//		test5();
		test6();
//		test7();
	}
	private static void test7() {
//		查看java.lang包下的string类
		
//		split结果阈值limit
		String input="论语,孟子,大学,中庸,,";
		String[] array=input.split("[,,]",0);//
		System.out.println(array.length==4);
		
		array=input.split("[,,]",-1);//将每一个匹配到的分割符作为分割点
		System.out.println(array.length==6);
		
		array=input.split("[,,]",2);
		System.out.println(array.length);//1 [论语, //2 孟子,大学,中庸,,]
		System.out.println(Arrays.toString(array));
	}

	private static void test6() {
//		字符的捕获
		Pattern pattern=Pattern.compile("<b>(\\S+?)</b>",Pattern.MULTILINE);//模板
		String input="aaa<b>如梦令</b><b>满江红</b>vvv";
		Matcher matcher = pattern.matcher(input);//匹配器
//		System.out.println(matcher.find());
		while(matcher.find()) {
			System.out.println(matcher.start());//匹配字符的开始下标
			System.out.println(matcher.end());//匹配字符的结束下标
			System.out.println(matcher.group());//分组捕获
			System.out.println(matcher.group(0));
			System.out.println(matcher.group(1));
//			System.out.println(matcher.group(2));
		}
	}

	private static void test5() {
		//反向引用
		String regex="(\\w{3})\\1";
		System.out.println("123456".matches(regex)==false);
		System.out.println("123123".matches(regex)==true);
		System.out.println("456456".matches(regex)==true);
		System.out.println("abcabc".matches(regex)==true);
		
		regex="(\\w{2})\\1+";
		System.out.println("12121212".matches(regex)==true);
		System.out.println("abab".matches(regex)==true);
	}

	private static void test4() {
		// 匹配模式
//		最大匹配(Greedy ,贪婪模式)
//		String regex="(<b>(\\S+)</b>)";
//		最小匹配 (Reluctant ,勉强模式)
//		String regex="(<b>(\\S+?)</b>)";
//		独占模式(Possessive )
//		System.out.println("<b>如梦令</b><b>满江红</b>".replaceAll(regex, "$2"));
		String regex="\\S+b";
		System.out.println("aaaab".matches(regex));
		regex="\\S++b";//独占模式不会回溯
		System.out.println("aaaab".matches(regex)==false);
	}

	private static void test3() {
//		String regex="\\$";
		String regex="\\p{Sc}";
		System.out.println("$".matches(regex));
		System.out.println("¥".matches(regex));
		System.out.println("".matches(regex));
		System.out.println("a".matches(regex)==false);
		regex="\\p{InGreek}";
		System.out.println("a".matches(regex)==false);
		System.out.println("α".matches(regex));
		System.out.println("Π".matches(regex));
	}


	private static void test2() {
		//		java.lang.Character classes 
		String regex="\\p{javaLowerCase}";
		System.out.println("a".matches(regex)==true);
		regex="\\p{javaMirrored}";
		System.out.println("(".matches(regex)==true);
		System.out.println("<".matches(regex)==true);
		System.out.println("《".matches(regex)==true);
		System.out.println(",".matches(regex)==false);
	}

	private static void test1() {
		String regex="\\p{Lower}";
		System.out.println("a".matches(regex)==true); 
		System.out.println("A".matches(regex)==false); 
		
		regex = "\\p{Alpha}";//英文字母大小写皆可
		System.out.println("a".matches(regex)==true);
		System.out.println("A".matches(regex)==true);
		
		regex = "\\p{Blank}";
		System.out.println(" ".matches(regex)==true);
		System.out.println("\t".matches(regex)==true);
		System.out.println("a".matches(regex)==false);
		
		regex = "\\p{Cntrl}";
		System.out.println("a".matches(regex)==true);
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中常用的正则表达式有很多种,以下是一些常见的用法: 1. 匹配手机号码:^1\[3456789\]\d{9}$ 这个正则表达式可以用来匹配以1开头的11位数字,其中第二位是3、4、5、6、7、8、9中的一个。 2. 匹配邮箱地址:^\w+(\[-+.\]\w+)*@\w+(\[-.\]\w+)*\.\w+(\[-.\]\w+)*$ 这个正则表达式可以用来匹配常见的邮箱地址格式,包括用户名部分、@符号、域名部分和后缀部分。 3. 匹配身份证号码:(^\d{15}$)|(^\d{17}(\[0-9\]|X)$) 这个正则表达式可以用来匹配15位或18位的身份证号码,其中最后一位可以是数字或大写字母X。 4. 匹配URL地址:^(https?|ftp)://\[^\s/$.?#\].\[^\s\]*$ 这个正则表达式可以用来匹配常见的URL地址格式,包括协议部分(http、https、ftp)、域名部分和路径部分。 这些只是一些常见的正则表达式用法,实际上还有很多其他的用法和规则可以根据具体需求进行定制。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* *2* [Java正则表达式语法及常用正则表达式汇总](https://blog.csdn.net/La_Grace/article/details/129786033)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [Java 正则表达式(深度长文)](https://blog.csdn.net/senxu_/article/details/126109760)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值