非阻塞匹配查找

我有一个代码,是这样的: -非阻塞匹配查找

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)如果模式匹配不列入发生遭到封锁。如何避免这种阻塞性质,并在输入字符串中没有匹配的情况下出现。

回答:

它不阻止但根据str内容无限循环。如果你在pos = 1找到一个匹配,那么pos--返回匹配器在初始状态(到pos = 0),这会导致一个无限循环

回答:

我在想你正在寻找这样的东西。我猜你正在试图在你的输入字符串(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++;

}

}

}

}

以上是 非阻塞匹配查找 的全部内容, 来源链接: utcz.com/qa/260587.html

回到顶部