练习java文档Pattern

Patternjava文档练习
变量
CANON_EQ 没太懂他的意思,感觉就是在compile中指定的话,会使一些字符相等,可能是正则相等,如果不指定的话,就是严格相等才行。这是现在的理解,查不到比较好的答案。只能自己猜一猜
在这里插入图片描述

CASE_INSENSITIVE
COMMENTS 是对compile中的字符生效,空格会被忽略,#xxx\n这样会被忽略
DOTALL
LITERAL效果和r类似,但是r是取消了\的转译作用,而LITERAL是把\W之类的变为了普通的字符,没有匹配所有字母的作用了
MULTILINE 如果设置了这个变量,就会把\n作为每行的分割,否则,会把一整段看成一行
UNICODE_CASE搞不懂什么意思
UNICODE_CHARACTER_CLASS 也搞不懂。。。
在这里插入图片描述
上面这两个暂时看不懂。先放着

UNIX_LINES 和DOTALL很类似,DOTALL是把\r和\n都进行匹配,也就是匹配任何字符,而UNIX_LINES则是匹配除了\n以外的任何字符

关于变量,这篇博客可以作为参考
JDK之Pattern类探索(一)

方法
asMatchPredicate() 返回的Predicate< String >对象的test(str)方法,相当于p.matcher(str).matches()
asPredicate() 返回的Predicate< String > 对象的test(str)方法,相当于p.matcher(str).find()
compile()
flags()返回的是指定的flag的值之和,比如指定了COMMENTS(4)和CASE_INSENSITIVE(2)则flags()返回6
matcher()
matches() 相当于p.matcher().matches()
pattern()返回compile编译的字符串,然后\w会变成\w,(?i)会保留
quote()返回的字符串,用来compile后,效果和设置了Pattern.LITERAL一样
toString()和pattern()返回值很像

如何以?x的形式启动以上变量
compile("(?i)(?x)a");

如何同时设置多个变量
Pattern.CASE_INSENSITIVE|Pattern.MULTILINE

import java.util.regex.*;
import java.util.*;
import java.util.function.*;
import java.util.stream.*;
public class Test
{
	public static void main(String[] args) throws Exception
	{
		//Pattern
		//变量
		System.out.println(Pattern.CANON_EQ);
		System.out.println(new String("a\u030A"));
		System.out.println((char)'\u030A');
		System.out.println((char)'\u00E5');
		
		Pattern p = Pattern.compile("a\u030A");
		Matcher m = p.matcher("\u00E5");
		System.out.println(m.matches());
		
		p = Pattern.compile("a",Pattern.CASE_INSENSITIVE);
		m = p.matcher("A");
		System.out.println(m.matches());

		p = Pattern.compile("#AA \n a  #abb",Pattern.COMMENTS);
		m = p.matcher("a");
		System.out.println(m.matches());

		p = Pattern.compile("a.*b",Pattern.DOTALL);
		m = p.matcher("acsd\ngb");
		System.out.println(m.matches());

		p = Pattern.compile("\\w",Pattern.LITERAL);
		m = p.matcher("\\w");
		System.out.println(m.matches());

		p = Pattern.compile("^\\d+");
		m = p.matcher("a123456789");
		System.out.println(m.find());

		p = Pattern.compile("\\d$");
		m = p .matcher("a123456789b");
		System.out.println(m.find());

		p = Pattern.compile("^\\d+",Pattern.MULTILINE);
		m = p.matcher("123aaa\n456bbb\ncc555");
		while(m.find())
		{
			System.out.println(m.group());
		}

		p = Pattern.compile("a",Pattern.UNICODE_CASE);
		m = p.matcher("A");
		System.out.println(m.matches());

		p = Pattern.compile("a",Pattern.UNICODE_CHARACTER_CLASS|Pattern.CASE_INSENSITIVE);
		m = p.matcher("A");	
		System.out.println(m.matches());

		p = Pattern.compile(".+");
		m = p.matcher("aaa\rbbb");
		int i = 0;
		while(m.find())
		{
			i++;
			System.out.println("group("+i+"):"+m.group());
		}
		System.out.println();
		//UNIX_LINES
		p = Pattern.compile(".+",Pattern.UNIX_LINES);
		m = p.matcher("aaa\rbbb");
		i = 0;
		while(m.find())
		{
			i++;
			System.out.println("group("+i+"):"+m.group());
			//这里其实应该输出"group(1):aaa\rbbb"但是因为\r把光标移动到本行最左边
			//所以导致了输出变成"bbbup(1):aaa", 这也说明了在Pattern.UNIX_LINES模式下
			//匹配的是整个aaa\rbbb ,而没有设置Pattern.UNIX_LINES模式的情况,
			//会把\r当成分隔符,不匹配。很类似DOTALL
		}
		
		

		p = Pattern.compile(".+",Pattern.UNIX_LINES);
		m = p.matcher("aaa\rbbb");
		System.out.println(m.matches());

		System.out.println("ccc\n\r99");
		System.out.println("DOTALL");
		p = Pattern.compile(".+",Pattern.DOTALL);
		m = p.matcher("aaa\nbbb");
		i = 0;
		while(m.find())
		{
			System.out.println("group("+i+"):"+m.group());
		}
		System.out.println("UNIX_LINES");
		p = Pattern.compile(".+",Pattern.UNIX_LINES);
		m = p.matcher("aaa\nbbb");
		i = 0; 
		while(m.find())
		{
			System.out.println("group("+i+"):"+m.group());
		}
		System.out.println("\u0041");

		p = Pattern.compile("A",Pattern.UNICODE_CASE);
		m = p.matcher("\u0041");
		System.out.println(m.matches());

		p = Pattern.compile("\\p{Lower}",Pattern.UNICODE_CHARACTER_CLASS);
		m = p.matcher("aaAB");
		while(m.find())
		{
			System.out.println(m.group());
		}

		p = Pattern.compile("aa");
		Predicate<String> pre = p.asMatchPredicate();
		System.out.println(pre.test("aac"));

		p = Pattern.compile("aa");
		pre = p.asPredicate();
		System.out.println(pre.test("aac"));

		p = Pattern.compile("(?x)(?i)a # asdfa");
		m = p.matcher("A");
		System.out.println(m.matches());

		System.out.println(p.flags());
		System.out.println(Pattern.COMMENTS);
		System.out.println(Pattern.CASE_INSENSITIVE);
		System.out.println(Pattern.DOTALL);
		System.out.println(Pattern.LITERAL);
		System.out.println(Pattern.MULTILINE);
		System.out.println(Pattern.UNICODE_CASE);
		System.out.println(Pattern.UNICODE_CHARACTER_CLASS);
		System.out.println(Pattern.UNIX_LINES);

		System.out.println(Pattern.matches("(?i)a","A"));

		p = Pattern.compile("(?i)666\\w+");
		System.out.println(p.pattern());
		System.out.println(Pattern.quote("\\w\\d\\D"));

		p = Pattern.compile(Pattern.quote("\\w\\d"));
		m = p.matcher("\\w\\d");
		System.out.println(m.matches());

		String str = "a1b2c3d4e5";
		p = Pattern.compile("\\d");
		System.out.println(Arrays.toString(p.split(str)));
		p = Pattern.compile("\\D");
		System.out.println(Arrays.toString(p.split(str)));
		
		p = Pattern.compile("\\d");
		System.out.println(Arrays.toString(p.split(str,2)));

		Stream<String> stream = p.splitAsStream(str);
		stream.forEach((s) -> System.out.println(s));

		p = Pattern.compile("(?i)aaa\\d\\w");
		System.out.println(p.toString());
 	}
	
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

细水长流cpu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值