正则表达式(base64)懂的来

yjhyy418 2013-12-06 11:07:49
http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjgzLWF2Yy0yNTQyMzctYWFjLTMxNTg2LTI3MDQyNDAtMTAwODM1ODY2LTQyYmNiZjhhMjY2OTAzMGNjNjAwNDJkODE3YjRlY2ZmLTEzODUzOTM0NTE0MzMuZmx2?b=
http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjkwLWF2Yy0xNjExMzU4LWFhYy0xMjQzNjktMjcwNDI0MC02MDM1NzQ0NzgtNGNjNmQ5NzQ0NzY4Y2EyOWM5ZmVjN2YzYWY2Yjc4MDEtMTM4NTM5OTQzNjM2My5mbHY=?b=
http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjg4LWF2Yy05MzczNTUtYWFjLTEyNDM2OS0yNzA0MjQwLTM3MDI3NjYwNS1mMGY0NWVlMDZhMGE1MjliNGJjMzM2ZTkzNTBjNWQwYS0xMzg1Mzk4OTcwMjk2LmZsdg==?b=

final static Pattern PATTERN_JSON_OF_RAND = Pattern.compile("http://([0-9a-zA-Z]+?)?b=");

进行正则表达式的时候
Matcher m = PATTERN_JSON_OF_RAND.(html);
if (!m.find())
throw......//出现没有找到,

哪位大婶能帮我改改正则表达式,加下划线的地方为要匹配的地方。


...全文
1199 32 打赏 收藏 转发到动态 举报
写回复
用AI写文章
32 条回复
切换为时间正序
请发表友善的回复…
发表回复
末日哥 2013-12-06
  • 打赏
  • 举报
回复
	public static void main(String[] args) {
		String html = "http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjgzLWF2Yy0yNTQyMzctYWFjLTMxNTg2LTI3MDQyNDAtMTAwODM1ODY2LTQyYmNiZjhhMjY2OTAzMGNjNjAwNDJkODE3YjRlY2ZmLTEzODUzOTM0NTE0MzMuZmx2?b=" +
				"http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjkwLWF2Yy0xNjExMzU4LWFhYy0xMjQzNjktMjcwNDI0MC02MDM1NzQ0NzgtNGNjNmQ5NzQ0NzY4Y2EyOWM5ZmVjN2YzYWY2Yjc4MDEtMTM4NTM5OTQzNjM2My5mbHY=?b=" +
				"http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjg4LWF2Yy05MzczNTUtYWFjLTEyNDM2OS0yNzA0MjQwLTM3MDI3NjYwNS1mMGY0NWVlMDZhMGE1MjliNGJjMzM2ZTkzNTBjNWQwYS0xMzg1Mzk4OTcwMjk2LmZsdg==?b=";
		 Pattern p = Pattern
				.compile("http://([\\w=]+?)\\?b=");
		Matcher m = p.matcher(html);
		while (m.find()) {
			System.out.println(m.group(1));
		}
	}
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 2 楼 fudongrifdr 的回复:
你的第二个问好转一下义http://([0-9a-zA-Z]+?)\\?b=
	public static void main(String[] args) {
		String html = "http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjgzLWF2Yy0yNTQyMzctYWFjLTMxNTg2LTI3MDQyNDAtMTAwODM1ODY2LTQyYmNiZjhhMjY2OTAzMGNjNjAwNDJkODE3YjRlY2ZmLTEzODUzOTM0NTE0MzMuZmx2?b=http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjkwLWF2Yy0xNjExMzU4LWFhYy0xMjQzNjktMjcwNDI0MC02MDM1NzQ0NzgtNGNjNmQ5NzQ0NzY4Y2EyOWM5ZmVjN2YzYWY2Yjc4MDEtMTM4NTM5OTQzNjM2My5mbHY=?b=http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjg4LWF2Yy05MzczNTUtYWFjLTEyNDM2OS0yNzA0MjQwLTM3MDI3NjYwNS1mMGY0NWVlMDZhMGE1MjliNGJjMzM2ZTkzNTBjNWQwYS0xMzg1Mzk4OTcwMjk2LmZsdg==?b=";
		final Pattern PATTERN_JSON_OF_RAND = Pattern
				.compile("http://([0-9a-zA-Z]+?)\\?b=");
		Matcher m = PATTERN_JSON_OF_RAND.matcher(html);
		while (m.find()) {
			System.out.println(m.group());
		}
	}
还是不行啊
末日哥 2013-12-06
  • 打赏
  • 举报
回复
你的第二个问好转一下义http://([0-9a-zA-Z]+?)\\?b=
	public static void main(String[] args) {
		String html = "http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjgzLWF2Yy0yNTQyMzctYWFjLTMxNTg2LTI3MDQyNDAtMTAwODM1ODY2LTQyYmNiZjhhMjY2OTAzMGNjNjAwNDJkODE3YjRlY2ZmLTEzODUzOTM0NTE0MzMuZmx2?b=http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjkwLWF2Yy0xNjExMzU4LWFhYy0xMjQzNjktMjcwNDI0MC02MDM1NzQ0NzgtNGNjNmQ5NzQ0NzY4Y2EyOWM5ZmVjN2YzYWY2Yjc4MDEtMTM4NTM5OTQzNjM2My5mbHY=?b=http://NDIvMS8xNi9sZXR2LXV0cy84NzAzMjg4LWF2Yy05MzczNTUtYWFjLTEyNDM2OS0yNzA0MjQwLTM3MDI3NjYwNS1mMGY0NWVlMDZhMGE1MjliNGJjMzM2ZTkzNTBjNWQwYS0xMzg1Mzk4OTcwMjk2LmZsdg==?b=";
		final Pattern PATTERN_JSON_OF_RAND = Pattern
				.compile("http://([0-9a-zA-Z]+?)\\?b=");
		Matcher m = PATTERN_JSON_OF_RAND.matcher(html);
		while (m.find()) {
			System.out.println(m.group());
		}
	}
suciver 2013-12-06
  • 打赏
  • 举报
回复
因为地址是base64的所以不会出现"?" Pattern PATTERN_JSON_OF_RAND = Pattern.compile("(?<=http://)\\w+?(?=\\?)"); Matcher m=PATTERN_JSON_OF_RAND.matcher(html); while(m.find()){ System.out.println(m.group()); }
Conradyu2013 2013-12-06
  • 打赏
  • 举报
回复
http://([A-Za-z0-9=]+)\?b=
rock711 2013-12-06
  • 打赏
  • 举报
回复
更正下:输出应该是 jZmLTEzODUzOTM0NTE0MzMuZmx+2 NmQ5NzQ0NzY4Y2EyOWM5ZmVjN2/Y= NDM2OS0yNzA0MjQwLTM3MDI3N/+jY==
rock711 2013-12-06
  • 打赏
  • 举报
回复
依据BASE64的规则完全匹配,再找出楼主要求的一划线的值:

public class Test {
		
	public static void main(String[] args) {
		//base64: a-z A-Z 0-9	/ + =	
			String http = 
			"http://jZmLTEzODUzOTM0NTE0MzMuZmx+2?b="+
			"http://NmQ5NzQ0NzY4Y2EyOWM5ZmVjN2/Y=?b="+
			"http://NDM2OS0yNzA0MjQwLTM3MDI3N/+jY==?b=";
			String reg = "http://([A-Za-z0-9\\+/=]+)\\?b=";
			java.util.regex.Pattern p = Pattern.compile(reg);
			Matcher m = p.matcher(http);
			
			while(m.find()){
				System.out.println(m.group(1));
				/**
				 *  http://jZmLTEzODUzOTM0NTE0MzMuZmx+2
					http://NmQ5NzQ0NzY4Y2EyOWM5ZmVjN2/Y=
					http://NDM2OS0yNzA0MjQwLTM3MDI3N/+jY==
				 */
			}
	}
}
rock711 2013-12-06
  • 打赏
  • 举报
回复

public class Test {
		
	public static void main(String[] args) {
		//base64: a-z A-Z 0-9	/ + =	
			String http = 
			"http://jZmLTEzODUzOTM0NTE0MzMuZmx+2?b="+
			"http://NmQ5NzQ0NzY4Y2EyOWM5ZmVjN2/Y=?b="+
			"http://NDM2OS0yNzA0MjQwLTM3MDI3N/+jY==?b=";
			String reg = "(http://[A-Za-z0-9\\+/=]+)\\?b=";
			java.util.regex.Pattern p = Pattern.compile(reg);
			Matcher m = p.matcher(http);
			
			while(m.find()){
				System.out.println(m.group(1));
				/**
				 *  http://jZmLTEzODUzOTM0NTE0MzMuZmx+2
					http://NmQ5NzQ0NzY4Y2EyOWM5ZmVjN2/Y=
					http://NDM2OS0yNzA0MjQwLTM3MDI3N/+jY==
				 */
			}
	}
}


tony4geek 2013-12-06
  • 打赏
  • 举报
回复
引用 26 楼 yjhyy418 的回复:
引用 24 楼 suciver 的回复:
[quote=引用 21 楼 yjhyy418 的回复:] [quote=引用 20 楼 suciver 的回复:] [quote=引用 19 楼 yjhyy418 的回复:] [quote=引用 18 楼 suciver 的回复:] [quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以[/quote] 大哥我也不知道啊[/quote] 你12楼给出的字符串和你一开始给出的完全不一样。怪不得正则没用。你开始给出的是http://这里变成了http:\\/\\/g3\\/vod\\/v2\\/这样开头的 到底是哪个[/quote] 这个无所谓的啦,关键是下划线的部分匹配不出来,这才是问题啊[/quote] 当然有所谓, 你开头都不一样。
suciver 2013-12-06
  • 打赏
  • 举报
回复
引用 26 楼 yjhyy418 的回复:
引用 24 楼 suciver 的回复:
[quote=引用 21 楼 yjhyy418 的回复:] [quote=引用 20 楼 suciver 的回复:] [quote=引用 19 楼 yjhyy418 的回复:] [quote=引用 18 楼 suciver 的回复:] [quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以[/quote] 大哥我也不知道啊[/quote] 你12楼给出的字符串和你一开始给出的完全不一样。怪不得正则没用。你开始给出的是http://这里变成了http:\\/\\/g3\\/vod\\/v2\\/这样开头的 到底是哪个[/quote] 这个无所谓的啦,关键是下划线的部分匹配不出来,这才是问题啊[/quote] 怎么会无所谓不同的开头正则的写法就不一样 要是http://开头的正则就是

Matcher m = Pattern.compile("(?s)(?<=http://).+?(?=\\?)").matcher(html);
while(m.find()){
  System.out.println(m.group());
}
要是你12楼给的http:\/\/g3\/vod\/v2\/开头的正则

Matcher m = Pattern.compile("(?s)(?<=\\Qhttp:\\/\\/g3\\/vod\\/v2\\/\\E).+?(?=\\?)").matcher(html);
while(m.find()){
  System.out.println(m.group());
}
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 24 楼 suciver 的回复:
引用 21 楼 yjhyy418 的回复:
[quote=引用 20 楼 suciver 的回复:] [quote=引用 19 楼 yjhyy418 的回复:] [quote=引用 18 楼 suciver 的回复:] [quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以[/quote] 大哥我也不知道啊[/quote] 你12楼给出的字符串和你一开始给出的完全不一样。怪不得正则没用。你开始给出的是http://这里变成了http:\\/\\/g3\\/vod\\/v2\\/这样开头的 到底是哪个[/quote] 这个无所谓的啦,关键是下划线的部分匹配不出来,这才是问题啊
  • 打赏
  • 举报
回复
引用 23 楼 yjhyy418 的回复:
[quote=引用 22 楼 ysjian_pingcx 的回复:]
Pattern PATTERN_JSON_OF_RAND = Pattern
				.compile("http://\\w+={0,2}\\?b=");
lz你看这个行不行,把所有的找出来了,这个应该不是lz想要的结果吧
哎呀,还是不行哟。。。base64匹配的太bt了啊[/quote] 你的意思是,需要将这个字符串 进行解码吗?
suciver 2013-12-06
  • 打赏
  • 举报
回复
引用 21 楼 yjhyy418 的回复:
引用 20 楼 suciver 的回复:
[quote=引用 19 楼 yjhyy418 的回复:] [quote=引用 18 楼 suciver 的回复:] [quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以[/quote] 大哥我也不知道啊[/quote] 你12楼给出的字符串和你一开始给出的完全不一样。怪不得正则没用。你开始给出的是http://这里变成了http:\\/\\/g3\\/vod\\/v2\\/这样开头的 到底是哪个
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 22 楼 ysjian_pingcx 的回复:
Pattern PATTERN_JSON_OF_RAND = Pattern
				.compile("http://\\w+={0,2}\\?b=");
lz你看这个行不行,把所有的找出来了,这个应该不是lz想要的结果吧
哎呀,还是不行哟。。。base64匹配的太bt了啊
  • 打赏
  • 举报
回复
Pattern PATTERN_JSON_OF_RAND = Pattern
				.compile("http://\\w+={0,2}\\?b=");
lz你看这个行不行,把所有的找出来了,这个应该不是lz想要的结果吧
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 20 楼 suciver 的回复:
引用 19 楼 yjhyy418 的回复:
[quote=引用 18 楼 suciver 的回复:] [quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以[/quote] 大哥我也不知道啊
suciver 2013-12-06
  • 打赏
  • 举报
回复
引用 19 楼 yjhyy418 的回复:
引用 18 楼 suciver 的回复:
[quote=引用 17 楼 yjhyy418 的回复:] [quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧[/quote] 我试的都可以你怎么不可以
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 18 楼 suciver 的回复:
引用 17 楼 yjhyy418 的回复:
[quote=引用 16 楼 fudongrifdr 的回复:] 是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗[/quote] 不行,试过了,括号里的内容才是要匹配的东西吧
suciver 2013-12-06
  • 打赏
  • 举报
回复
引用 17 楼 yjhyy418 的回复:
引用 16 楼 fudongrifdr 的回复:
是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
楼主我的方法没试过吗
yjhyy418 2013-12-06
  • 打赏
  • 举报
回复
引用 16 楼 fudongrifdr 的回复:
是不是你的字符串里面有换行符
没有啊,原先匹配的时候不知道是涉及到base64编码规范的问题,但是final static Pattern PATTERN_JSON_RAND = Pattern.compile("http:\\/\\/g3.letv.cn\\/vod\\/v2\\/([0-9a-zA-Z==]+)\\?b=");我的代码,一般涉及base64后面需要加==才能匹配吧?版主用你的代码试过了还是不行
加载更多回复(12)

81,092

社区成员

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

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