Android正则表达式从站点获取图像URL

时间:2013-02-13 09:08:08

标签: java android regex pattern-matching expression

我正在制作一款应用,我遇到了这个问题 我使用模式识别代码来查找网站上文章的图片网址。

问题在于,以我的方式抓住第一张特别小的照片。

模式p = Pattern.compile(“http://planetaris.gr/media/k2/items/cache。* \。jpg”); 有一张XL图像,我想抓住它的目的地。

我想使用一种模式,在链接的末尾它就像这样

模式p = Pattern.compile(“(http://planetaris.gr/media/k2/items/cache.)+(。* \ [_ XL] +(。jpg))”);

或 模式p = Pattern.compile(“http://planetaris.gr/media/k2/items/cache。* \ _ _ XL.jpg”);

这是我需要你帮助的地方 这是代码

public void run(){

        //Pattern p = Pattern.compile("http://planetaris.gr/media/k2/items/cache.*\\.jpg");
        //Pattern p = Pattern.compile("http://planetaris.gr/media/k2/items/cache.*\\._XL.jpg");
        Pattern p = Pattern.compile("(http://planetaris.gr/media/k2/items/cache.)+(.*\\[_XL]+(.jpg))");

        try {
                    URL url = new URL(selectedRssItem.getLink());

                    URLConnection urlc = url.openConnection();
                    Log.d("MIMIS_LINK", url.toString());
                    BufferedInputStream buffer = new BufferedInputStream(urlc.getInputStream());

                    builder = new StringBuilder();
                    int byteRead;
                    while ((byteRead = buffer.read()) != -1)
                        builder.append((char) byteRead);

                    buffer.close();

                } catch (MalformedURLException ex) {
                    ex.printStackTrace();
                } catch (IOException ex) {
                    ex.printStackTrace();
                }

                Matcher m = p.matcher(builder.toString());


                if (m.find()) {

                try {
                    bitmap = BitmapFactory.decodeStream((InputStream)new URL(m.group(0)).getContent());
                } catch (MalformedURLException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }

                    Log.d("MIMIS_MATCHER", selectedRssItem.getDescription().toString());
                 };

        handler.sendEmptyMessage(0);

    }
    }.start();
    }

private Handler handler = new Handler() {

    //@SuppressWarnings("null")
    @Override
    public void handleMessage(Message msg) {

        mSpinner.clearAnimation();
        mSpinner.setVisibility(View.GONE);
            //progressDialog.dismiss();
        myimageview.setImageBitmap(bitmap);

        if (bitmap==null){

            myimageview.setImageResource(R.drawable.aris_no_image);

        };
        }       
        };  

因为在网站上还有一个有这个XL的jpg

这些是给定页面上的所有.jpg。

HREF = “/媒体/ K2 /项目/高速缓存/ df95c3d9029788dcdb6f520e9151056c_XL.jpg”

/media/k2/items/cache/df95c3d9029788dcdb6f520e9151056c_L.jpg“

“/图片/故事/ atnea2.jpg”

/images/stories/diarkeias-bc.jpg“

2 个答案:

答案 0 :(得分:0)

String url = "http://planetaris.gr/media/k2/items/cache.sample_XL.jpg";
String regex = "[0-9a-zA-Z\\-\\._/:]*[XL]\\.jpg$";
System.out.println(url.matches(regex)); //this will be print true if case matches files ends with *XL.jpg and *X.jpg and *L.jpg.


您只想使用正则表达式

检查字符串以'.jpg'结尾


String regex =“[\\ x20 - \\ x7E] * \\。jpg $”;


如果你想用* XL.jpg

找到文件结尾的完全匹配


String url =“http://planetaris.gr/media/k2/items/cache.sample_XL.jpg”;   
String regex =“[0-9a-zA-Z \\ - \\ ._ /:] * XL \\。jpg $”;   
的System.out.println(url.matches(正则表达式)); //如果大小写匹配,这将打印为真


如果你的URL字符串中有任何空格或特殊字符以及0-9a-zA-Z字符,请使用正则表达式。(这将返回true任何字符串结束于* XL.jpg)
String url =“http://planetaris.gr/media/k2/items%!@ _!$%/ cache.sample_ssXL.jpg”;
String regex =“[\\ x20 - \\ x7E] * XL \\。jpg $”;

答案 1 :(得分:0)

这个正则表达式:/(media|images)/[^\.]*\.jpg

匹配您的所有样品:

HREF = “/媒体/ K2 /项目/高速缓存/ df95c3d9029788dcdb6f520e9151056c_XL.jpg” /media/k2/items/cache/df95c3d9029788dcdb6f520e9151056c_L.jpg” “/images/stories/atnea2.jpg” /images/stories/diarkeias-bc.jpg“