我的代码是这样的: -
Pattern pattern = Pattern.compile("((\\{(.*?)\\}\\{)|(\\{(.*?)\\}$))");
final Matcher matcher = pattern.matcher(str);
int pos = 0;
while(true)
{
if(matcher.find(pos))
{
...
pos--;
}
else
break;
}
我看到的是,如果模式匹配没有发生,matcher.find(pos)会被阻止。如果输入字符串中没有匹配项,如何避免这种阻塞性质并使其出现。
答案 0 :(得分:1)
它不会阻止,而是根据str内容无限循环。如果你在pos = 1找到匹配,那么pos--在初始状态下返回匹配器(到pos = 0),这会导致无限循环
答案 1 :(得分:1)
我在想你正在寻找这样的东西。我猜你正在尝试在输入字符串(str)中找到每个模式。请参阅代码注释以实现。
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternTest
{
public static void main(String[] args)
{
String str = "{test1}{test2}{test3}{test4}";
Pattern pattern = Pattern.compile("((\\{(.*?)\\}\\{)|(\\{(.*?)\\}$))");
Matcher matcher = pattern.matcher(str);
int pos = 0;
while (true)
{
if (matcher.find(pos))
{
System.out.println("MATCH START: " + matcher.start());
System.out.println("MATCH END: " + matcher.end());
System.out.println("MATCH GROUP: " + matcher.group());
System.out.println();
// Move position to end of MATCH
pos = matcher.end()-1;
}
else if(matcher.hitEnd())
{
// Break when matcher hit end
break;
}
else
{
// No Match YET - Move position 1
System.out.println("NO MATCH");
pos++;
}
}
}
}