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实例失败。另一个失败的样本没有这个。 怎么了,你不清楚。我投票决定结束!