求java正则匹配!!!!!在线急等!!!

terryhuang 2013-08-30 09:16:17

/**
* 例子写的不好,仅供参考
* 取taskid:与stat:之间的数字,例子中结果为:12345
* 取stat:与yj:之间的数字,例子中结果为:3
* 取yj:之后的所有字符 例子中结果为:同意,很好。
*/
public static void test(){
String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
Pattern pattern = Pattern.compile("taskid:(.+?)stat:"); //标点怎么去掉
Matcher matcher = pattern.matcher(str);
if(matcher.find())
System.out.println(matcher.group(1));
}
...全文
165 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
郑涛 2013-08-30
  • 打赏
  • 举报
回复
我第一次回答问题,希望给我信心 \p{Punct} 标点符号:!"#$%&'()*+,-./:;<=>?@[\]^_`{|}~ public static void main(String[] args) { String str = "你好taskid:12345,,stat:3;yj:同意,很好。"; Pattern pattern = Pattern.compile("taskid:(\\d+).+stat:(\\d+).+:(.+)"); Matcher matcher = pattern.matcher(str); if (matcher.find()) { System.out.println(matcher.group(1)); System.out.println(matcher.group(2)); System.out.println(matcher.group(3)); } }
terryhuang 2013-08-30
  • 打赏
  • 举报
回复
2楼,3楼就是我想要的结果
terryhuang 2013-08-30
  • 打赏
  • 举报
回复
就是根据一个短信回复,取得taskid ,stat,yj这三个变量的值, 该怎么规定短信的格式呢? 怎么根据上行短信取变量值呢 taskid,stat 都是Long型 yj是String型
失落夏天 2013-08-30
  • 打赏
  • 举报
回复
我想楼主的意思应该输入开始和结束字段,截取中间的,需要的是一个式子而不是多个吧。 截取字符串这个很简单,但是楼主关于去掉符号说明的并不清楚, 我暂时的理解就是截取出来的字符串, 如果开头和结尾为符号则去掉,中间的符号则保留。对么? 如果那样的话 regex=".*?开始字段c([\\w|\u4E00-\u9FA5].*?[\\w|\u4E00-\u9FA5]).*?结束字段.*?"; [\\w|\u4E00-\u9FA5]//匹配所有英文字母和数字以及所有汉字包括繁体。 这样么? 如果差不多这样的回一下,我再精简下。。。
快乐的2 2013-08-30
  • 打赏
  • 举报
回复

/**
	 * @author XXX
	 * @date Aug 30, 2013 10:13:34 AM<BR/>
	 * @param args
	 */
	public static void main(String[] args) {
		String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
		Pattern pattern = Pattern.compile("(\\w+):(\\d+)|yj:(.*)", Pattern.DOTALL);
		Matcher matcher = pattern.matcher(str);
		while(matcher.find()){
			if(matcher.group(3) != null){
				System.out.println("yj=" + matcher.group(3));
			}else{
				System.out.println(matcher.group(1) + "=" + matcher.group(2));
			}
		}
	}
快乐的2 2013-08-30
  • 打赏
  • 举报
回复

(\w+):(\d+)|yj:(.*)
chta1986 2013-08-30
  • 打赏
  • 举报
回复
string reg = "taskid:(\\d*).*stat:(\\d*).*yj:(.*)"
末日哥 2013-08-30
  • 打赏
  • 举报
回复
	public static void main(String[] args) {

		String str = "你好taskid:12345,,stat:3;yj:同意,很好。";
		Pattern pattern = Pattern
				.compile("taskid:(\\d*).*stat:(\\d*).*yj:(.*)"); 
		Matcher matcher = pattern.matcher(str);
		if (matcher.find())
			System.out.println(matcher.group(1));
		System.out.println(matcher.group(2));
		System.out.println(matcher.group(3));
	}
weinianjie1 2013-08-30
  • 打赏
  • 举报
回复

	public static void main(String[] args){
	     /**
	     * 例子写的不好,仅供参考
	     * 取taskid:与stat:之间的数字,例子中结果为:12345
	     * 取stat:与yj:之间的数字,例子中结果为:3
	     * 取yj:之后的所有字符       例子中结果为:同意,很好。
	     */
        String str = "你好taskid:12345,,stat:3;yj:同意,很好。";  
        Pattern pattern = Pattern.compile("taskid:(.+?)stat:"); //标点怎么去掉
        Pattern pattern1 = Pattern.compile("taskid:(\\d+)[^s]+stat:");
        Pattern pattern2 = Pattern.compile("stat:(\\d+)[^y]+yj:");
        Pattern pattern3 = Pattern.compile("yj:(.+)");
        Matcher matcher1 = pattern1.matcher(str);
        Matcher matcher2 = pattern2.matcher(str);
        Matcher matcher3 = pattern3.matcher(str);
        if(matcher1.find())
          System.out.println(matcher1.group(1));
        if(matcher2.find())
            System.out.println(matcher2.group(1));
        if(matcher3.find())
            System.out.println(matcher3.group(1));
	}
输出 12345 3 同意,很好。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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