Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.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
具有动态字符串的Java正则表达式匹配器问题_Java_Regex_String Formatting - Fatal编程技术网

具有动态字符串的Java正则表达式匹配器问题

具有动态字符串的Java正则表达式匹配器问题,java,regex,string-formatting,Java,Regex,String Formatting,我对Java和动态输入中的正则表达式有一些问题-正则表达式没有任何问题;) 使用上面的字符串,我的测试java应用程序可以很好地工作。 但是当字符串确实来自另一个源时,匹配器与它不匹配 processHandler.addProcessListener(new ProcessAdapter() { @Override public void onTextAvailable(final ProcessEvent event, final Key outputType) { try {

我对Java和动态输入中的正则表达式有一些问题-正则表达式没有任何问题;)

使用上面的字符串,我的测试java应用程序可以很好地工作。 但是当字符串确实来自另一个源时,匹配器与它不匹配

processHandler.addProcessListener(new ProcessAdapter() {
 @Override
 public void onTextAvailable(final ProcessEvent event, final Key outputType) {
 try {
   outputParser.myMatchStringFunction(event.getText());
 }
 ...
}

 public void myMatchStringFunction(String line) {
  Matcher m = START_SUITE.matcher(line);
  if (m.matches) {
  ...
我用打印检查了字符串,它看起来没问题


知道会发生什么吗?

字符串是来自字符串文本还是动态来自输入不会影响任何东西。所以要么是正则表达式出了问题,要么是输入中的某些内容超出了预期,需要删除

你说你已经打印了字符串,但是很容易漏掉不可打印的字符或换行符等

我建议您完整打印一个失败的字符串示例,包括Unicode字符值,例如

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    System.out.println("Position: " + i + "Character: " + c
                       + " Unicode: " + (int) c);
}
for(int i=0;i

然后,如果需要的话,您就可以将该字符串准确地放入代码中,并且您可能只需以该形式检查它就可以发现错误。

该字符串是来自字符串文本还是来自输入的动态字符串根本不会影响任何内容。所以要么是正则表达式出了问题,要么是输入中的某些内容超出了预期,需要删除

你说你已经打印了字符串,但是很容易漏掉不可打印的字符或换行符等

我建议您完整打印一个失败的字符串示例,包括Unicode字符值,例如

for (int i = 0; i < text.length(); i++)
{
    char c = text.charAt(i);
    System.out.println("Position: " + i + "Character: " + c
                       + " Unicode: " + (int) c);
}
for(int i=0;i
然后,如果需要的话,您就可以将该字符串准确地放入代码中,并且您可能只需以该形式检查它就可以发现错误。

谢谢您的提示

在每个模式的末尾添加DOTALL和(*)解决了这个问题

private static Pattern START_SUITE = Pattern.compile("Test Suite '(\\S+)'.*started at\\s+(.*)", Pattern.DOTALL);
谢谢你的提示

在每个模式的末尾添加DOTALL和(*)解决了这个问题

private static Pattern START_SUITE = Pattern.compile("Test Suite '(\\S+)'.*started at\\s+(.*)", Pattern.DOTALL);