有时候我们向一个图片网站发送请求时,它会返回网站的html代码,而我们只要它的图片的网址,此时我们就要用到正则表达式来提取所要的代码
如:在xutils框架中,HttpUtils().send(HttpMethod method,String url,RequestCallBack<T> callBack)
{
@Override
public void onFailure(HttpException arg0, String arg1) {
}
@Override
public void onSuccess(ResponseInfo<String> response) {
}
}
请求成功时,该重写的方法会返回一个ResponseInfo对象,该对象的result参数就是所请求网站的html代码了,接下来就可以对该代码进行提取了
这里要用到java.util.regex包,它是一个是正则表达式所订制的模式来对字符串进行匹配工作的类库包,包有两个类Pattern和Matcher
一个Pattern实例订制了一个所用语法与PERL的类似的正则表达式经编译后的模式,
一个 Matcher实例在这个给定的Pattern实例的模式控制下进行字符串的匹配工作。
Pattern主要方法:
static Pattern compile(String regex) 将给定的正则表达式编译并赋予给Pattern类
static Pattern compile(String regex, int flags) 同上,但增加flag参数的指定,可选的flag参数包括:
CASE_ INSENSITIVE 启用不区分大小写的匹配
MULTILINE 启用多行模式
DOTALL 启用 dotall 模式。
UNICODE CASE 启用 Unicode 感知的大小写折叠。
CANON_EQ 启用规范等价。
int flags() 返回当前Pattern的匹配flag参数.
Matcher matcher(CharSequence input) 生成一个给定命名的Matcher对象
static boolean matches(String regex, CharSequence input) 编译给定的正则表达式并且对输入的字串以该正则表达式为模开展匹配,该方法适合于该正则表达式只会使用一次的情况,也就是只进行一次匹配工作,因为这种情况下并不需要生成一个Matcher实例。
String pattern() 返回该Patter对象所编译的正则表达式。
String[] split(CharSequence input) 将目标字符串按照Pattern里所包含的正则表达式为模进行分割。
String[] split(CharSequence input, int limit) 作用同上,增加参数limit目的在于要指定分割的段数,如将limi设为2,那么目标字符串将根据正则表达式分为割为两段。
Matcher主要方法:
boolean find() 尝试在目标字符串里查找下一个匹配子串。
boolean find(int start) 重设Matcher对象,并且尝试在目标字符串里从指定的位置开始查找下一个匹配的子串。
String group()返回当前查找而获得的与组匹配的所有子串内容
String group(int group) 返回当前查找而获得的与指定的组匹配的子串内容
int groupCount() 返回当前查找所获得的匹配组的数量。
List<String> pics = new ArrayList<String>();
htmlStr是网站的代码,这里要提取图片网址的代码,所以得设置一个正则匹配格式
正则表达式常用符号:
\ 转义字符
? 零次或一次匹配前面的字符或子表达式 例如,“do(es)?”匹配“do”或“does”中的“do”。? 等效于 {0,1
* 零次或多次匹配前面的字符或子表达式
+ 一次或多次匹配前面的字符或子表达式
. 匹配除“\n”之外的任何单个字符 例如 r.t 可以匹配 rat 、 ryr 等 但不可用匹配raat
实现代码:
String regEx_img = "<img.*?src=\"http://(.*?).jpg\"";
Pattern pattern = Pattern.compile(regEx_img, Pattern.CASE_INSENSITIVE);
Matcher m_image = pattern.matcher(html);
while(m_image.find())
{
String src = m_image.group(1);
//这里就可以对提取的src进行处理了,当然,如果你要完整的图片网址还必须在src前面加上http:// 后面补上.jpg
如:imageSrc.add("http://" + src + ".jpg");
}
谢谢大家!