在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+#
开始捕获组(
将url的开头与可选的shttps?://test.ir:808\d
和808后面的数字匹配。使用s?
匹配一个或多个数字\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;
}