正则表达式搜索字符串

时间:2012-10-16 08:10:49

标签: java regex

我在搜索字符串以查找我的应用程序中需要的特定参数时遇到很大问题,我假设唯一真正的方法是使用正则表达式但是它们让我头疼不已!我通常不会自己写它们但是把它们从其他网站上删除但是我需要的东西不够简单,不能包括在内:(

这是字符串:

10 50 u E2U+pstn:tel "!^(.*)$!tel:\\1;spn=42180;mcc=234;mnc=33!" .

我需要从此字符串中提取spnmccmnc。不幸的是,api i调用会改变字符串中这些字符串的位置,因为某些请求会使字符串索引变得困难。我真的需要列出我需要抓住spn =例如然后关闭并读取数字,但我尝试的一切都无法工作。

2 个答案:

答案 0 :(得分:2)

我不会使用正则表达式而只是拆分:

String[] tokens = str.split(";");
for (int i=0; i<tokens.length; i++) {
   if (tokens[i].startsWith("spn=")) {
       spn = Integer.parseInt(tokens[i].substring("spn=".length()));
   }
}

当然,您可以对此进行一些客观化,或者使用"spn="的常量。

答案 1 :(得分:1)

使用PatternMatcher的解决方案:

String s = "10 50 u E2U+pstn:tel \"!^(.*)$!tel:\\\\1;spn=42180;mcc=234;mnc=33!\"";
Pattern p = Pattern.compile("^.*spn=([0-9]+);mcc=([0-9]*);mnc=([0-9]*)!.*$");
Matcher matcher = p.matcher(s);
matcher.matches(); // true
String spn = matcher.group(1); // 42180
String mcc = matcher.group(2); // 234
String mnc = matcher.group(3); // 33

修改:您也可以使用named-capturing groups

Pattern p =
  Pattern.compile("^.*spn=(?<spn>[0-9]+);mcc=(?<mcc>[0-9]*);mnc=(?<mnc>[0-9]*)!.*$");
Matcher matcher = p.matcher(s);
matcher.matches(); // true
String spn = matcher.group("spn");
String mcc = matcher.group("mcc");
String mnc = matcher.group("mnc");