Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/191.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Android中通过正则表达式提取特定字符串_Android_Regex_Matcher - Fatal编程技术网

在Android中通过正则表达式提取特定字符串

在Android中通过正则表达式提取特定字符串,android,regex,matcher,Android,Regex,Matcher,我有以下几点: 我想把我所有的http://esupb.tabriz.ir:808x/srvSC.svc放入数组列表中。因此,为了避免这种情况,我使用了matcher-like-blow: String regx= "#\\d+#"; Pattern pattern = Pattern.compile(regx); Matcher matcher = pattern.matcher(url); String[] metadata = new String[4]; while (matcher.f

我有以下几点:

我想把我所有的
http://esupb.tabriz.ir:808x/srvSC.svc
放入数组列表中。因此,为了避免这种情况,我使用了matcher-like-blow:

String regx= "#\\d+#";
Pattern pattern = Pattern.compile(regx);
Matcher matcher = pattern.matcher(url);
String[] metadata = new String[4];
while (matcher.find()) {
    metadata[0] = matcher.group(1);
    metadata[1] = matcher.group(2);
    metadata[2] = matcher.group(3);
    metadata[3] = matcher.group(4);
}

但我没有得到适当的结果。我犯了什么错

根据要求,您的正则表达式将

“(#\d+)(http[^#]*svc)(#\d+)”

将代码更改为

List<String> urls = new ArrayList<>();

String url =
        "#1#http://test.com:8080/srv.svc#1# " +
                "#2#http://test.com:8081/srv.svc#2# " +
                "#3#http://test.com:8082/srv.svc#3# " +
                "#4#http://test.com:8083/srv.svc#4# " +
                "#5#http://test.com:8084/srv.svc#5# ";

String regx = "(#\\d+#)(http[^#]*svc)(#\\d+#)";
Pattern pattern = Pattern.compile(regx);
Matcher matcher = pattern.matcher(url);

int from = 0;
while (matcher.find(from)) {
    urls.add(matcher.group(2));
    from = matcher.start() + 1;
}
List url=new ArrayList();
字符串url=
"#1#http://test.com:8080/srv.svc#1# " +
"#2#http://test.com:8081/srv.svc#2# " +
"#3#http://test.com:8082/srv.svc#3# " +
"#4#http://test.com:8083/srv.svc#4# " +
"#5#http://test.com:8084/srv.svc#5# ";
String regx=“(#\\d+#)(http[^#]*svc)(#\\d+#)”;
Pattern=Pattern.compile(regx);
Matcher Matcher=pattern.Matcher(url);
int from=0;
while(matcher.find(from)){
add(matcher.group(2));
from=matcher.start()+1;
}
您的正则表达式
\\d+
匹配
,然后匹配一个或多个数字,然后再匹配另一个
。它不使用

对于示例数据,您可以从字符串中提取所需的结果,而不必为剩下的字符串匹配任何模式。它也可以在字符串内部匹配,而不是仅在开始和结束时匹配

匹配示例字符串,如
http://esupb.tabriz.ir:808x/srvSC.svc
您可以使用正则表达式匹配开始和结束,并在组中捕获介于两者之间的内容

^#\d+#(https?://test.ir:808\d/srvSC\.svc)#\d+$

在爪哇

^\\\d+\\(https?://test.ir:808\\d/srvSC\\.svc)\\\\d+$

解释

  • ^
    断言字符串的开头
  • #\d+#
    匹配#,一个数字和另一个数字的一次或多次#
  • 开始捕获组
    • https?://test.ir:808\d
      将url的开头与可选的s
      s?
      和808后面的数字匹配。使用
      \d+
      匹配一个或多个数字
    • /srvSC\.svc
      匹配/srvSC.svc
    • #\d+#
      匹配#,一个数字和另一个数字的一次或多次#
  • 关闭caputring组
  • $
    断言字符串的结尾

  • Matcher\groupCount()
    返回什么?它是
    Matcher.groupCount()=1
    @pskinkno,您在模式中定义您的组:可能:
    \d+#(.*)\d+#
    ?您有
    while(matcher.find()){
    所以使用它来查找所有匹配项
    List<String> urls = new ArrayList<>();
    
    String url =
            "#1#http://test.com:8080/srv.svc#1# " +
                    "#2#http://test.com:8081/srv.svc#2# " +
                    "#3#http://test.com:8082/srv.svc#3# " +
                    "#4#http://test.com:8083/srv.svc#4# " +
                    "#5#http://test.com:8084/srv.svc#5# ";
    
    String regx = "(#\\d+#)(http[^#]*svc)(#\\d+#)";
    Pattern pattern = Pattern.compile(regx);
    Matcher matcher = pattern.matcher(url);
    
    int from = 0;
    while (matcher.find(from)) {
        urls.add(matcher.group(2));
        from = matcher.start() + 1;
    }