Java 如何优化正则表达式模式?
我正在尝试从文本中获取子字符串并使用正则表达式。 示例文本: bla bla 1:30-2pm bla bla 5-6:30am some text 1-2:15am 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
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));
}
}