Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/378.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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,我有下面的节目, import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.regex.Pattern; public class Regex { public static void main(String[] args) { String VALID_GUID_REGEX = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[

我有下面的节目,

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.regex.Pattern;

public class Regex {
    public static void main(String[] args) {
        String VALID_GUID_REGEX = "[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12}";
        Pattern NOT_PREFIXED_FILES_REGEX =
                Pattern.compile("(^"+VALID_GUID_REGEX+"/\\b(foo|bar)\\b.*)|^[^/]+$");

        List<String> list = new ArrayList<>();
        list.add("256a5037-9fc1-4e60-95c3-523d5ae1c935/foo/44434038019,2019-05-24T09:02:18.695Z,b4786bf4-157a-4f1b-a030-4c5416e1884a");
        list.add("256a5037-9fc1-4e60-95c3-523d5ae1c935/bar/44434038019,2019-05-24T09:02:18.695Z,b4786bf4-157a-4f1b-a030-4c5416e1884a");
        list.add("govcorp/123a5037-9fc1-4e60-95c3-523d5ae1c935/foo/text.doc");
        list.add("156a5037-9fc1-4e60-95c3-523d5ae1c935/123a5037-9fc1-4e60-95c3-523d5ae1c935/delta/text.doc");
        list.add("123a5037-9fc1-4e60-95c3-523d5ae1c935/");

        String[] keys = list.stream()
                .filter(k -> NOT_PREFIXED_FILES_REGEX.matcher(k).find())
                .toArray(String[]::new);

        System.out.println(Arrays.toString(keys));
    }
}
我们先考虑一下,

256a5037-9fc1-4e60-95c3-523d5ae1c935/bar/44434038019,2019-05-24T09:02:18.695Z,b4786bf4-157a-4f1b-a030-4c5416e1884a 
如果我输入256a5037-9fc1-4e60-95c3-523d5ae1c935/-Pass和256a5037-9fc1-4e60-95c3-523d5ae1c935/bar/-Pass,我将从服务器获取文件路径

让我们考虑失败案例,GOVCORP/-FAIL和GOVCORP/123A5037.9FC1-4E60-95C3-523 D5AE1C935/-失败

如果两个GUID序列案例失败,例如

156a5037-9fc1-4e60-95c3-523d5ae1c935/123a5037-9fc1-4e60-95c3-523d5ae1c935/-失败


如果只有一个GUID大小写,例如123e4567-e89b-12d3-a456-426655440001/-Pass

是否要将所有.doc与正则表达式匹配,或者只匹配具有与现有正则表达式(包括.doc)匹配的子字符串的行

对于后者,用.*\b{regex}\b包围正则表达式*

这样,就可以匹配整条线,并且仍然可以捕获匹配

^(.*\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})\b.* 

您想将所有.doc与正则表达式匹配,还是只匹配包含与现有正则表达式(包括.doc)匹配的子字符串的行

对于后者,用.*\b{regex}\b包围正则表达式*

这样,就可以匹配整条线,并且仍然可以捕获匹配

^(.*\b[0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})\b.* 

在这里,我们首先用一个简单的表达式使不需要的字符串失败:

^((?!\.doc).)*$
然后,对于其余的字符串,我们将设计第二个表达式,在本例中,您的原始表达式工作得很好,我们可能只想用一个捕获组来包装它:

([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})
测验 正则表达式电路 可视化正则表达式:


在这里,我们首先用一个简单的表达式使不需要的字符串失败:

^((?!\.doc).)*$
然后,对于其余的字符串,我们将设计第二个表达式,在本例中,您的原始表达式工作得很好,我们可能只想用一个捕获组来包装它:

([0-9a-fA-F]{8}-[0-9a-fA-F]{4}-[0-9a-fA-F]{4}-[89abAB][0-9a-fA-F]{3}-[0-9a-fA-F]{12})
测验 正则表达式电路 可视化正则表达式:


你应该逃走。我不确定我是否正确理解您的问题,但我猜123a5037-9fc1-4e60-95c3-523d5ae1c935/应该匹配,但它不匹配。这就是你面临的问题吗?如果是这样,请查看您的正则表达式:它要么需要一个后跟foo或bar的guid,要么需要一个不带任何斜杠的字符串^[^/]+$。最后一项以guid开头,但不包含foo或bar,但包含斜杠,因此第二个选项也不匹配。请详细说明可能的输入以及需要匹配的内容?目前,您的正则表达式似乎指示任何guid前面不能有任何内容,后面必须有foo或bar。任何不以GUID开头的字符串都不能包含斜线——那么,你的最后一个例子是如何拟合的呢?例如,让我们考虑第一行256A5037.9FC1-4E60-95C3-52D5AE1C935/Foo/44 434080192019-05-24T09:02:18.695Z,如果我的输入是256a5037-9fc1-4e60-95c3-523d5ae1c935/-通过和256a5037-9fc1-4e60-95c3-953D5AE1C935/-通过,则此行中的b4786bf4-157a-4f1b-a030-4c5416e1884a也将继续。我的正则表达式应该匹配所有的组合,比如说通过/失败案例。例如,如果我的输入以govcorp/-Fail开头。如果156A503C94C65D5A51A51C935/123A5037.9FC1-4E60-95C3-523 D5AE1C935/-PASS,让我们考虑失败情况,GOVCORP/-FAIL和GOVCORP/123A5037.9FC1-4E60-95C3-523 D5AE1C935/-失败您的样本只有1个GOVCORP实例失败。另一个失败的样本没有这个。怎么了,你不清楚。我投票决定结束!你应该逃走。我不确定我是否正确理解您的问题,但我猜123a5037-9fc1-4e60-95c3-523d5ae1c935/应该匹配,但它不匹配。这就是你面临的问题吗?如果是这样,请查看您的正则表达式:它要么需要一个后跟foo或bar的guid,要么需要一个不带任何斜杠的字符串^[^/]+$。最后一项以guid开头,但不包含foo或bar,但包含斜杠,因此第二个选项也不匹配。请详细说明可能的输入以及需要匹配的内容?目前,您的正则表达式似乎指示任何guid前面不能有任何内容,后面必须有foo或bar。任何不以GUID开头的字符串都不能包含斜线——那么,你的最后一个例子是如何拟合的呢?例如,让我们考虑第一行256A5037.9FC1-4E60-95C3-52D5AE1C935/Foo/44 434080192019-05-24T09:02:18.695Z,如果我的输入是256a5037-9fc1-4e60-95c3-523d5ae1c935/-通过和256a5037-9fc1-4e60-95c3-953D5AE1C935/-通过,则此行中的b4786bf4-157a-4f1b-a030-4c5416e1884a也将继续。我的正则表达式应该匹配所有的组合,比如说通过/失败案例。例如,如果我的输入以govcorp/-Fail开头。如果156A503C94C65D5A51A51C935/123A5037.9FC1-4E60-95C3-523 D5AE1C935/-PASS,让我们考虑失败情况,GOVCORP/-FAIL和GOVCORP/123A5037.9FC1-4E60-95C3-523 D5AE1C935/-失败您的样本只有1个GOVCORP实例失败。另一个失败的样本没有这个。 怎么了,你不清楚。我投票决定结束!