无法匹配模式

时间:2014-04-05 10:41:38

标签: java android regex

我有一个长字符串文本,我必须正则表达式才能找到一个短文本字符串。

例如,我必须从http://www.hltv.org/match/2290951-uumlberholverbot-legendbots-bot-tournament-2014获取网站内容。获取内容后,我只需要在网站的来源中匹配一个字符串,其中this.content是检索到的网站的来源,我需要匹配date:"1396706400000", htmlTemplate:

正则表达式运行良好,只是它总是返回错误。

public String getCountdown() {
        Pattern countdownPattern = Pattern.compile("date:\"(.*?)\", htmlTemplate");
        Matcher m = countdownPattern.matcher(this.content);
        if (m.find()) {
            String time = m.group(1).trim();
            return time;
        } else {
            return "ERROR";
        }

谢谢!

2 个答案:

答案 0 :(得分:0)

你的模式很好。您的代码还有其他问题,或者输入数据不是您认为的那样。

我建议对模式稍作调整:

"date:\"[^\"]+\", htmlTemplate"

这将是一种更强大的匹配方式。但问题不在于匹配模式。

答案 1 :(得分:0)

实际上,您的代码工作正常,我做了以下事情:

public class MainActivity extends Activity {

String content;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    new Thread(new Runnable() {
        @Override
        public void run() {
            HttpClient httpClient = new DefaultHttpClient();
            HttpGet get = new HttpGet("http://www.hltv.org/match/2290951-uumlberholverbot-legendbots-bot-tournament-2014");
            try {
                HttpResponse response = httpClient.execute(get);
                InputStream is = response.getEntity().getContent();
                content = inputStreamToString(is);
                final TextView message = (TextView) findViewById(R.id.message);
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        message.setText(getCountdown());
                    }
                });
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }).start();
}

private String inputStreamToString(InputStream is) throws IOException {
    BufferedReader br = new BufferedReader(new InputStreamReader(is));
    StringBuilder sb = new StringBuilder();
    String line;
    while ((line = br.readLine()) != null) {
        sb.append(line);
    }
    return sb.toString();
}

public String getCountdown() {
    Pattern countdownPattern = Pattern.compile("date:\"(.*?)\", htmlTemplate");
    Matcher m = countdownPattern.matcher(this.content);
    if (m.find()) {
        String time = m.group(1).trim();
        return time;
    } else {
        return "ERROR";
    }
}

布局:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="http://schemas.android.com/apk/res/android">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Loading..."
        android:id="@+id/message" />
</LinearLayout>

只有陷阱是可爱 java方式将HttpResponse转换为简单String。有更好/更简单的方法吗?