什么是给定SMS字符串的正则表达式

时间:2012-08-03 05:11:27

标签: java android regex sms

我的字符串是一个短信,它将采用以下两种格式之一:

主持人的短信:
你收到了1个领导权 标题:我的领导 潜在客户ID :12345-2365
提醒设置ID :890

回复短信:
你收到1回复
标题:我的回复
回复ID :12345-2365
广告ID :890

实际上,我正在解析SMS以将值存储在相应字段中的数据库中。我想使用正则表达式来解析逻辑。正如您在上面看到的那样,SMS由引导或回复区分,并且字段根据它们而不同(以粗体显示)。我的问题是如何使用正则表达式区分这两种SMS类型。例如,如果我想区分SMS字符串中的潜在客户ID和回复ID,那么正则表达式字符串是什么?

注意:我知道另一种叫做String.split()的方法,但基于此编写的代码太长而且复杂。所以使用正则表达式。

谢谢和问候 Sohaib Rahman

1 个答案:

答案 0 :(得分:1)

我使用此代码提取消息的ID值并区分消息类型。我使用的代码是:

    String lead = "You have received 1 lead\ntitle:my lead\nlead id:12345-2365\nalert setting id:890";
    String reply = "You have received 1 reply\ntitle:my reply\nreply id:12345-2365\nad id:890\n";

    Pattern leadPattern = Pattern.compile("lead id:\\s*(\\d{5}-\\d{4})", Pattern.MULTILINE);
    Matcher leadMatcher = leadPattern.matcher(lead);
    if (leadMatcher.find())
    {
        System.out.println("Lead: " + leadMatcher.group(1));
    }


    Pattern replyPattern = Pattern.compile("reply id:\\s*(\\d{5}-\\d{4})", Pattern.MULTILINE);
    Matcher replyMatcher = replyPattern.matcher(reply);
    if (replyMatcher.find())
    {
        System.out.println("Reply: " + replyMatcher.group(1));
    }

    System.out.println(leadPattern.matcher(reply).find());
    System.out.println(replyPattern.matcher(lead).find());

它产生了以下结果:

Lead: 12345-2365
Reply: 1234-2365
false
false