关于java中的\和正则表达式中的\

根据实际的测试和理解,在java字符串中\本来就表示转义字符,它会试图将后面挨着它的任何字符转义,如果转义无指定含义则非法,不能通过编译,比如\.所以在和正则无关的字符串中要表示路径中的分隔符都得用\\


所以要表示正则中特殊含义的\d,要用\先把\转义回来,再加上d,这样就是\\d,所以java的正则表达式中\基本都是成对出现的,因为它在java意义上的字符串中。这可能和php不同,因为php字符串中的正则表达式有专门的两个/来隔离。


所以想要利用正则表达式,用.来分割字符串,就得用\\.表示这个正则表达式。因为.在正则表达式中代表任意字符,要想表达.就要在正则意义上转义,而如果表示成\.则编译提示:非法转义符,因为这是在java意义上企图将.转义,而对应的意义是不存在的。所以要先在java意义上将\转义,即\\,然后在正则意义上转义.,即\\.,编译通过,切割正确:

例子:

public static void splitDemo(String str,String reg)
	{

		String[] arr=str.split(reg);

		for(String s:arr)
		{
			System.out.println(s);
		}

	}

String str1="zhangsan.lisi.wangwu";
		String reg1="\\.";//直接用.不行,代表正则表达式的任意字符,用\.则是(在java意义上)转义了.无意义(非法),所以用\转义一下\(变成正则意义上的转义字符?),所以用\\.表示用.切割!

		splitDemo(str1,reg1);


结果:

zhangsan

lisi

wangwu


关于这个问题的其他网友解答(引用,特此感谢):

关于java中的\和正则表达式中的\_第1张图片

你可能感兴趣的:(Java)