Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.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_Text_Regex Lookarounds_Regex Group - Fatal编程技术网

Java 如何优化正则表达式模式?

Java 如何优化正则表达式模式?,java,regex,text,regex-lookarounds,regex-group,Java,Regex,Text,Regex Lookarounds,Regex Group,我正在尝试从文本中获取子字符串并使用正则表达式。 示例文本: bla bla 1:30-2pm bla bla 5-6:30am some text 1-2:15am java代码段: public static List<String> foo(String text, String regex) { List<String> entries = new ArrayList<>(); Matcher matcher = Pattern.com

我正在尝试从文本中获取子字符串并使用正则表达式。 示例文本:

bla bla 1:30-2pm bla bla 5-6:30am some text 1-2:15am java代码段:

public static List<String> foo(String text, String regex) {
    List<String> entries = new ArrayList<>();
    Matcher matcher = Pattern.compile(regex).matcher(text);
    while (matcher.find()) {
        entries.add(matcher.group());
    }
    return entries;
}
公共静态列表foo(字符串文本,字符串正则表达式){
列表项=新的ArrayList();
Matcher Matcher=Pattern.compile(regex).Matcher(text);
while(matcher.find()){
entries.add(matcher.group());
}
返回条目;
}

你能帮我优化正则表达式模式吗?我可能遗漏了一些用例

我建议使用类似正则表达式的

String regex = "(?i)(?<!\\d)(?:0?[1-9]|1[0-2])(?::[0-5]\\d)?\\p{Pd}(?:0?[1-9]|1[0-2])(?::[0-5]\\d)?[ap]m\\b";

String regex=“(?i)(?我建议使用类似regex的

String regex = "(?i)(?<!\\d)(?:0?[1-9]|1[0-2])(?::[0-5]\\d)?\\p{Pd}(?:0?[1-9]|1[0-2])(?::[0-5]\\d)?[ap]m\\b";

String regex=“(?i)(?如果我们想优化表达式,我们可能需要添加可选空格,以防我们的输入可能有任何其他空格,除此之外,您的表达式看起来很棒:

(\d{1,2})(:\d{1,2})?(\s+)?-(\s+)?(\d{1,2})(:\d{1,2})?(am|pm)
如果我们希望获得数据,我们还添加了捕获组

或:

随便哪个都行

试验
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
最后一个字符串regex=“(\\d{1,2})(:\\d{1,2})(\\s+)-(\\s+)(\\d{1,2})(:\\d{1,2})-(am | pm)”;
final String=“bla bla 1:30-2pm bla bla 5-6:30am一些文本1-2:15am\n”
+“blabla1:30-2pmbla5-6:30am一些文本1-2:15am”;
final Pattern=Pattern.compile(regex,Pattern.MULTILINE | Pattern.CASE|u不区分大小写);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));

对于(int i=1;i如果我们想优化表达式,我们可能需要添加可选空格,以防我们的输入可能有任何额外空格,除此之外,您的表达式看起来很棒:

(\d{1,2})(:\d{1,2})?(\s+)?-(\s+)?(\d{1,2})(:\d{1,2})?(am|pm)
如果我们希望获得数据,我们还添加了捕获组

或:

随便哪个都行

试验
import java.util.regex.Matcher;
导入java.util.regex.Pattern;
最后一个字符串regex=“(\\d{1,2})(:\\d{1,2})(\\s+)-(\\s+)(\\d{1,2})(:\\d{1,2})-(am | pm)”;
final String=“bla bla 1:30-2pm bla bla 5-6:30am一些文本1-2:15am\n”
+“blabla1:30-2pmbla5-6:30am一些文本1-2:15am”;
final Pattern=Pattern.compile(regex,Pattern.MULTILINE | Pattern.CASE|u不区分大小写);
final Matcher Matcher=pattern.Matcher(字符串);
while(matcher.find()){
System.out.println(“完全匹配:+matcher.group(0));

因为(inti=1;我感谢jex.im谢谢jex.im
import java.util.regex.Matcher;
import java.util.regex.Pattern;

final String regex = "(\\d{1,2})(:\\d{1,2})?(\\s+)?-(\\s+)?(\\d{1,2})(:\\d{1,2})?(am|pm)";
final String string = "bla bla 1:30-2pm bla bla 5-6:30am some text 1-2:15am\n"
     + "bla bla 1:30 - 2pm bla bla 5  - 6:30am some text 1 - 2:15am";

final Pattern pattern = Pattern.compile(regex, Pattern.MULTILINE | Pattern.CASE_INSENSITIVE);
final Matcher matcher = pattern.matcher(string);

while (matcher.find()) {
    System.out.println("Full match: " + matcher.group(0));
    for (int i = 1; i <= matcher.groupCount(); i++) {
        System.out.println("Group " + i + ": " + matcher.group(i));
    }
}