Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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 - Fatal编程技术网

Java:如果找不到正则表达式,请执行某些操作

Java:如果找不到正则表达式,请执行某些操作,java,regex,Java,Regex,我正在解析日志文件,当找到正则表达式时,我需要做一件事(将“、TRUE”添加到变量、.csv、ArrayList),当找不到该正则表达式时,我还需要做其他事情(添加一个空槽“、”或“、”如果空槽不好) 可以从每个日志文件中解析1-200个条目,因此正则表达式可以多次匹配“无” 我尝试了几个选项,要么在编译时出错(不喜欢针对字符串测试布尔值),不发生可观察的操作,要么在找到正则表达式时得到未找到正则表达式的结果 我需要一个变量、.csv或ArrayList中的输出,因此如果找不到匹配项,那么我需要

我正在解析日志文件,当找到正则表达式时,我需要做一件事(将“、TRUE”添加到变量、.csv、ArrayList),当找不到该正则表达式时,我还需要做其他事情(添加一个空槽“、”或“、”如果空槽不好)

可以从每个日志文件中解析1-200个条目,因此正则表达式可以多次匹配“无”

我尝试了几个选项,要么在编译时出错(不喜欢针对字符串测试布尔值),不发生可观察的操作,要么在找到正则表达式时得到未找到正则表达式的结果

我需要一个变量、.csv或ArrayList中的输出,因此如果找不到匹配项,那么我需要一个空“,”,因为输出是预定义的表,所以列需要正确对齐

我尝试过的组合:

if(!noBaseText.equals("No matching base data found"))
if(!noBaseText.equals("No matching base data found") == false)
if(noBaseText.equals("No matching base data found" != true))
if(noBaseText.isEmpty())
if(noBaseText.equals(""))
if(!noBaseText.equals(""))
if(noBaseText.equals("No matching base data found"))
带有上述组合的“}else{”和“}else if(…){”在嵌套的if/else(如下面的代码所示)或作为“if(baseMatcher.find())”的“else”返回相同的结果时

代码段:

Pattern noBase = Pattern.compile("(?<noBase>No matching base data found)");
try(corrReader)
            {
                while ((corrLine = corrReader.readLine())!=null)
                {
                    corrText = corrLine.trim();
                    Matcher baseMatcher = noBase.matcher(corrText);
                    if (baseMatcher.find()) 
                    {
                        String noBaseText = baseMatcher.group("noBase");
                        if(!noBaseText.equals("No matching base data found"))
                        {
                            corrOutput += ",";
                        } else if(noBaseText.equals("No matching base data found")) {
                            corrOutput += ",TRUE";
                        } //end else
                    } //end if(baseMatcher)
                } //end while(corrLine)
            } //end try(corrReader)
Pattern noBase=Pattern.compile((?未找到匹配的基础数据)”;
试一试(corrReader)
{
而((corrLine=corrReader.readLine())!=null)
{
corrText=corrLine.trim();
Matcher baseMatcher=noBase.Matcher(corrText);
if(baseMatcher.find())
{
字符串noBaseText=baseMatcher.group(“noBase”);
如果(!noBaseText.equals(“未找到匹配的基础数据”))
{
腐蚀输出+=“,”;
}else if(noBaseText.equals(“未找到匹配的基础数据”)){
corrOutput+=“,TRUE”;
}//结束其他
}//如果结束(baseMatcher)
}//结束时(corrLine)
}//结束尝试(corrReader)
当存在匹配时,我得到的输出:

AA-123-12345-SP1.SSF,正确

当没有匹配项时,我得到的输出:

AA-123-12345-SP2.SSF,100100,guug04314054.zip

当不存在匹配项时,我需要获得的输出:

AA-123-12345-SP2.SSF,,100100,guug04314054.zip


当正则表达式匹配且返回'TRUE'时,将不会有以下条目;当正则表达式不匹配且返回''时,将有其他条目。

您可以使用三元运算符来完成此操作:

boolean found = false;
while ((corrLine = corrReader.readLine())!=null)
{
  ...
      String noBaseText = baseMatcher.group("noBase");
      found |= noBaseText.equals("No matching base data found");
  ...
}

corrOutput += found ? "TRUE," :  ",";

如果找到的
计算结果为true,您将得到
“true”,“否则,
”,“

我不确定我是否正确,但是..如果要检查模式是否为空,请执行以下操作:

if(noBase.pattern().isEmpty()) {
// do your stuff
}

find()
的结果还不够吗?为什么要检查组?顺便说一句,如果
find()
返回
true
,组将始终是该文本,因此您将永远不会得到
,“
。请尝试
corrOutput+=baseMatcher.find()?“true”,“:”;
如果(baseMatcher.find()){corrOutput+=“true”,;}否则{corrOutput+=“,”;}
@Carlos Hueberger输出是一个.csv,因此该字段的列在不为true时被省略,当导入到电子表格时它会将这些列丢弃。@Carlos Hueberger我尝试了您的建议,但结果没有变化。感谢您的帮助,tho!!只使用
find()的结果
;不要使用
组(…)
模式()
应该只返回构造函数中使用的正则表达式……我在添加第一个代码段时得到了相同的行为,但是当我将else添加到baseMatcher时,我在输出中得到了很多虚假的逗号-我的直觉是由于while循环迭代了25个条目,其中只有1个应该返回“TRUE”。啊,如果你想要聚合的话(
TRUE,
如果在25条记录中的任何一条中找到,
否则),那么您需要一个布尔变量来跟踪它是否在循环中找到。您需要|=而不是在循环中追加,然后根据变量末尾的值追加。