2012-08-03 55 views
0

我的字符串是一个手机短信会来在以下两种格式:会有什么的正则表达式给出短信串

短信铅:
您已收到1导致
称号:我的领导
铅ID:12345-2365
警报设置ID:890

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

其实,我解析SMS以将值存储在数据库中的各个字段中。我想使用正则表达式来解析逻辑。正如您在上面看到的,短信通过主持或回复进行区分,并且字段根据不同而不同(粗体)。我的问题是,如何使用正则表达式来区分这两种SMS类型。例如,如果我想区分SMS字符串中的lead id和reply id,那么正则表达式字符串是什么?

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

感谢和问候
Sohaib拉赫曼

+0

等待一秒钟。你的领导ID和回复ID看起来完全一样。 – jmishra 2012-08-03 05:15:10

+0

这并不重要...我想区分“主角ID”和“回复ID”字符串。 :) – 2012-08-03 05:20:28

回答

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