java正则表达式Pattern.complier()的问题

大大的尾巴 2015-04-09 09:23:30
尝试使用java里面的正则表达式,现在是有一个类似于"[1]abcdefg[2]fafaffa[3]..."的句子想要匹配,其中想匹配到的是【1-9】的部分,但是是要有外面的方括号的,我尝试用"\[[1-9]\]",还没有用到"*[a-z]*\[[1-9]\][a-z]*"来表示,但是总是报错:Invalid escape sequence (valid ones are \b \t \n \f \r \" \' \\ )

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

public class test {
public static void main(String[] args)
{
String temp="[1]abcd";
Matcher m=Pattern.compile("\[[1-9]\][a-z]*").matcher(temp);
if(m.matches())
System.out.println("YES");
else
System.out.println("NO");
}
}
...全文
345 10 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
yj7810520113 2015-04-14
  • 打赏
  • 举报
回复
\改成\\....
neverMortred 2015-04-14
  • 打赏
  • 举报
回复
楼主(.*)中.代表的是任何字符(包含]),而字符串匹配默认是贪婪模式,所以会匹配到字符串的最后一个“]”符号,所以这里最好别用(.*) 还有一点在字符串中要得到\需要再加一个转义字符\,所以一般有两个\\,"[a-z]*\\[\\d\\][a-z]*"
kk8399091 2015-04-14
  • 打赏
  • 举报
回复
import java.util.regex.*; public class T21 { public static void main(String[] args) { String temp = "[1]abcd[2]efg[5]hij[9]"; //Matcher m = Pattern.compile("\\[[1-9]\\][a-z]*+\\[[1-9]\\]").matcher(temp); Matcher m = Pattern.compile("\\[[1-9]\\][\\w\\[\\]]+?\\[[1-9]\\]").matcher(temp); m.reset(); if (m.matches()) { System.out.println("YES"); } else { System.out.println("NO"); } } }
tony4geek 2015-04-10
  • 打赏
  • 举报
回复
引用 2 楼 gao54456 的回复:
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
你想干什么啊 [ ] 这个是在正则,\[ \] ,加转义的话意思不一样/。
淡定的峰哥 2015-04-10
  • 打赏
  • 举报
回复
引用 2 楼 gao54456 的回复:
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
试了一下 将 .* 换成(\\w*)是可以的
suciver 2015-04-10
  • 打赏
  • 举报
回复
楼主是要匹配还是要查找啊
朱容赋 2015-04-10
  • 打赏
  • 举报
回复
晕,“\” 需要转义
天天天晴朗 2015-04-10
  • 打赏
  • 举报
回复
引用 2 楼 gao54456 的回复:
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
引用 2 楼 gao54456 的回复:
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
引用 2 楼 gao54456 的回复:
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
你的这个正则表达式匹配的结果是[bbbbb]gswg[b]zgsg[bb] 所以按这个分割字符串以后就得到一个长度为2的数组。 第一个元素是空,第二个元素是tfu 如果想要匹配每一个[]单元,可以使用\[(^])*\]这种写法 其实说到根本就是正则表达式的贪婪模式 去百度找一下看看,有利于更好理解你这个问题
大大的尾巴 2015-04-09
  • 打赏
  • 举报
回复
public class test {
	public static void main(String[] args)
	{
		String temp="[bbbbb]gswg[b]zgsg[bb]tfu";
		boolean m=Pattern.matches(".*\\[(.*)\\].*",temp);
		if(m)
		{
			String[] array=temp.split("\\["+"(.*)"+"\\]");
			System.out.println(array.length);
			for(int i=0;i<array.length;i++)
				System.out.println(array[i]);
		}
		else
			System.out.println("NO");
	}
}
还有就是为什么这个程序测试的结果长度怎么老是2啊,难道不能用(.*)的结构?
大大的尾巴 2015-04-09
  • 打赏
  • 举报
回复
应该是用什么正则表达式匹配啊,求问啊

62,635

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧