我有一个像这样的字符串
"abc:def"
我需要检查它是否匹配。如果是,我想应用正则表达式并检索它的第一部分("abc"
)。
这是我的尝试:
Pattern pattern = Pattern.compile(".*:.*");
String name = "abc:def"
Matcher matcher = pattern.matcher(name);
if (matcher.find()) {
String group = matcher.group(1);
System.out.println(group);
}
它给了我
线程中的异常" main" java.lang.IndexOutOfBoundsException:没有组1
答案 0 :(得分:6)
您需要在正则表达式中添加capturing group。这是通过将您想要捕获的内容放在括号内来完成的:
Pattern pattern = Pattern.compile("(.*):.*"); // <-- parentheses here
String name = "abc:def";
Matcher matcher = pattern.matcher(name);
if (matcher.find()) {
String group = matcher.group(1);
System.out.println(group); // prints "abc"
}
答案 1 :(得分:4)
您只有group (0)
(完全匹配),因为您没有在正则表达式中定义任何捕获组(包含在(
和)
中)
如果您更改代码以包含此类捕获组
Pattern pattern = Pattern.compile("([^:]*):.*");
String name = "abc:def";
Matcher matcher = pattern.matcher(name);
if (matcher.find()) {
String fullMatch = matcher.group(0);
String group = matcher.group(1);
System.out.println(group);
}
你将完全匹配“abc:def”和第一组(直到第一次冒号)“abc”
答案 2 :(得分:0)
Pattern
中没有捕获组:
Pattern pattern = Pattern.compile(".*:.*");
有关详细信息,请参阅documentation of Pattern。
我认为你需要这个:
Pattern pattern = Pattern.compile("(.*):.*");
答案 3 :(得分:0)
试试这个:
import java.util.regex.Pattern;
import java.util.regex.Matcher;
public class HelloWorld
{
public static void main(String[] args)
{
String patternString = ".*:.*";
Pattern pattern = Pattern.compile(patternString);
String name = "abc:def";
Matcher matcher = pattern.matcher(name);
while(matcher.find()) {
System.out.println("found: " + matcher.group(0));
}
}
}