Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.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:Regex不匹配_Java_Regex_String_Match_Comma - Fatal编程技术网

Java:Regex不匹配

Java:Regex不匹配,java,regex,string,match,comma,Java,Regex,String,Match,Comma,我有逗号分隔的字符串值。每个字符串都可以包含字符或数字以及“-”或“/”或“.” 我的代码如下所示: final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*([0-9a-zA-Z\\-\\_\\.])*\\}$"; final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX); final String values = "{df1_apx.fhh.irtrs.d.rrr, f

我有逗号分隔的字符串值。每个字符串都可以包含字符或数字以及“-”或“/”或“.”

我的代码如下所示:

final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    // further logic
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*\\s*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)((?:,\\s*[0-9a-zA-Z\\-\\_\\.]*)*)\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    for (int index=1; index<=matcher.groupCount(); ++index) {
        System.out.println(matcher.group(index));
    }
}
...
...
这里if条件总是返回假值,因为正则表达式匹配失败。我验证了正则表达式的使用。看起来不错

你能告诉我这里怎么了吗

更新:使用Avinash提供的正则表达式,match可以工作。但对群体的发现失败了。代码如下所示:

final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    // further logic
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*\\s*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)((?:,\\s*[0-9a-zA-Z\\-\\_\\.]*)*)\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    for (int index=1; index<=matcher.groupCount(); ++index) {
        System.out.println(matcher.group(index));
    }
}
...
...
更新:在Avinash提供了新的正则表达式之后,尝试寻找单独的组。但逗号也被认为是字符串的一部分。代码如下所示:

final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    // further logic
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.])+,*\\s*([0-9a-zA-Z\\-\\_\\.])*\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
        while (matcher.find()) {
            System.out.println(matcher.group());
        }
}
...
...
final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)((?:,\\s*[0-9a-zA-Z\\-\\_\\.]*)*)\\}$";
final Pattern REGEX_PATTERN = Pattern.compile(VALUES_REGEX);
final String values = "{df1_apx.fhh.irtrs.d.rrr, ffd1-afp.farr.d.rrr.asgd}";
final Matcher matcher = REGEX_PATTERN.matcher(values);
if (null != values && matcher.matches()) {
    for (int index=1; index<=matcher.groupCount(); ++index) {
        System.out.println(matcher.group(index));
    }
}
...
...

我只需要找到匹配的字符串值。

输入字符串中逗号后有一个空格

final String VALUES_REGEX = "^\\{([0-9a-zA-Z\\-\\_\\.]+)((?:,\\s*[0-9a-zA-Z\\-\\_\\.]*)*)\\}$";

IntelliJ能够使用以下正则表达式匹配示例字符串:

^([0-9a-zA-Z_\-\.])+([,]*)([0-9a-zA-Z_\-\.])*$

您可以将正则表达式简化如下:

// [a-zA-Z0-9_] -> \w
final String VALUES_REGEX = "\\{([\\w.-]+)(?:, *([\\w.-]+))*\\}";
注意:
^
$
如果使用
Matcher.matches
,则不需要,因为它匹配整个字符串

编辑: 已更新正则表达式以分别匹配组

for (int i=1; i<=matcher.groupCount(); ++i) System.out.println(matcher.group(i));
或者只是把绳子分开

String[] strings = values.substring(1, values.length() - 2).split(", *");
System.out.println(Arrays.toString(strings));

字符串中不允许有空格。
matcher.find
用于在输入字符串中多次查找正则表达式(在您的情况下,只有一个匹配项)
matcher.group()
提供整个匹配以访问单个组使用
matcher.group(int index)
对于一个或多个逗号分隔的字符串使用此,
“^\{[0-9a-zA-Z\\\\-\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\.++(?:,\\s*([0-9a-zA-zA-zA-zA-Z\\\\\\\\\\\\\\\\\\\\\\\\\\\失败?我清楚地看到两组。我用这些详细信息更新了我的问题。我尝试了新的正则表达式。但逗号也被认为是字符串值的一部分。用代码段更新了问题。如何只找到匹配的字符串值?试试。如果输入是
{foo,bar,buz,foobar},你的输出是什么
?由于编辑太多,最好将其作为一个新问题提问。您好,我很抱歉,因为我的最新更新显示了不正确的正则表达式。但我仅在测试中使用了您提供的正则表达式。再次更新了问题。您提供的链接显示了正确的匹配。但不确定为什么我的代码显示了不正确的输出。我将创建新问题f或者这个问题。您好,谢谢您对groupCount()api的提示。效果很好。您好,Tomse,我试过了。但是使用您提供的新正则表达式。使用groupCount()api后,我总是会得到其他值。当我使用matcher.find()时,失败了。有什么想法吗?嗨,为这个主题创建了一个新问题。期待您的反馈:@user613114您是否尝试过注释下面的示例:。我用您的示例和其他值尝试了这个,它确实有效。