正则表达式问题

ivan_070 2013-10-11 11:28:42
字符串:
/a_xxxx/b_xxxx/c_xxx
我需要查询出xxx,这里的xxx可以是任意字符,a、b、c的位置也可能不固定,或者没有例如:
/a_111/b_222/c_333
/a_111/b_222
/b_222/a_111/c_333

请问这样的正则表达式应该怎么写
...全文
141 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
ivan_070 2013-10-11
  • 打赏
  • 举报
回复
字符串可能是: /title/111/content/222
ivan_070 2013-10-11
  • 打赏
  • 举报
回复
非常感谢各位,刚刚需求变了,字符串应该是这样的: /a/111/b/222/c/333 这里的111、222、333可能是字母数字; 另外a、b、c可能是text这样一个数字加字母的组合,但是是固定的。
失落夏天 2013-10-11
  • 打赏
  • 举报
回复
顶一下下三楼的, 应该没问题
花木兰1闪21A 2013-10-11
  • 打赏
  • 举报
回复
这个好点

private static void mytest6() {
		String str = "/a_xxxx/c_xxx/b_2234";
		Pattern p = Pattern.compile("[abc]_(.*?)($|/)");
		Matcher m = p.matcher(str);
		while (m.find()) {
				System.out.println(m.group(1));
		}
	}
花木兰1闪21A 2013-10-11
  • 打赏
  • 举报
回复
private static void mytest6() { String str = "/a_sfsdf/b_werwer/c_333"; Pattern p = Pattern.compile("[abc]_(.*?)(([^/])$|/)"); Matcher m = p.matcher(str); while (m.find()) { if(m.group(3)==null){ System.out.println(m.group(1)); }else{ System.out.println(m.group(1)+m.group(3)); } } }
花木兰1闪21A 2013-10-11
  • 打赏
  • 举报
回复
为什么非要正则,先splist("/"),在split("_")不行嘛
ivan_070 2013-10-11
  • 打赏
  • 举报
回复
引用 1 楼 shpery 的回复:
String s = "/a_xxxx/b_xxxx/c_xxx";
		Pattern p = Pattern.compile("\\d+");//定义规则
		String str[] = p.split(s);//进行拆分
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
不是这个意思。是通过matcher先find,然后group得到,我写了一点,后面就不知道怎么写了。

String str = "/a_111/b_222/c_333";
Pattern pattern = Pattern.compile("/a_(?<a>.+?)(/|$)");
Matcher matcher = pattern.matcher(str);
System.out.println(matcher.find());
System.out.println(matcher.group("a"));
主要问题有两个,一个是a、b、c相对的位置确定,另外是b、c可能没有。 如果字符串是是/a_111/b_222/c_333,我希望等到111、222、333; 如果字符串是是/a_111/c_333,我希望等到111、333; 如果字符串是是/b_222/a_111/c_333,我希望等到222、111、333;
末日哥 2013-10-11
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		String str = "/a_111/b_222/c_333xsdsd";
		Pattern pattern = Pattern.compile("[abc]_([^/]+)");
		Matcher m = pattern.matcher(str);
		while(m.find()) {
			System.out.println(m.group(1));
		}
	}
shpery 2013-10-11
  • 打赏
  • 举报
回复
String s = "/a_xxxx/b_xxxx/c_xxx";
		Pattern p = Pattern.compile("\\d+");//定义规则
		String str[] = p.split(s);//进行拆分
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
ivan_070 2013-10-11
  • 打赏
  • 举报
回复
感谢楼上的各位朋友,我知道怎么写了。

Pattern pattern = Pattern.compile("/(title|content)/([^/]+)");
Matcher matcher = pattern.matcher(str);
while(matcher.find()){
	System.out.println(matcher.group(2));
}
非常非常感谢。
末日哥 2013-10-11
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		String str = "/title/111/content/222";
		Pattern pattern = Pattern.compile("[a-z]+/([^/]+)");
		Matcher m = pattern.matcher(str);
		while(m.find()) {
			System.out.println(m.group(1));
		}
	}

62,634

社区成员

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

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