我有一个输入字符串格式如下。
96.7.4.14 - - [24/Apr/2011:04:20:11 -0400] "GET /cat.jpg HTTP/1.1" 200 1243
我知道如何从字符串中获取整个日期,但是提取三个字母月份代码的最佳方法是什么?
答案 0 :(得分:2)
您可以使用以下正则表达式提取月份中的三个字母
(?<=\d{2}\/)(\w{3})(?=\/\d{4})
它的基本工作是在后面寻找两个数字和一个斜杠,同时在寻找三个斜体字的同时寻找一个斜杠和4个数字。
以下是一个更简单的解决方案,不使用正则表达式,因为字符串的开头始终包含相同格式的字符,如下所示
String text = "96.7.4.14 - - [24/Apr/2011:04:20:11 -0400] \"GET /cat.jpg HTTP/1.1\" 200 1243";
int firstLetterOfMonth = text.indexOf('/') + 1;
String month = text.substring(firstLetterOfMonth, firstLetterOfMonth + 3);
System.out.println(month); // Apr
答案 1 :(得分:1)
您可以提供一种模式来查找整个日期:
private static final Pattern p = Pattern.compile("(\\d{2}\\/)(\\w{3})(\\/\\d{4})");
,然后使用匹配器找到包含三个字母的单词(又称为月份)的组:
Matcher m = p.matcher("96.7.4.14 - - [24/Apr/2011:04:20:11 -0400] GET /cat.jpg HTTP/1.1 200 1243");
if (m.find()) {
System.out.println(m.group(2)); // second expression from the round brackets
}
答案 2 :(得分:0)
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class x {
public static void main (String [] args) {
String data = "96.7.4.14 - - [24/Apr/2011:04:20:11 -0400] \"GET /cat.jpg HTTP/1.1\" 200 1243";
Pattern p = Pattern.compile("\\d{2}/(\\w{3})/\\d{4}");
Matcher m = p.matcher(data);
if (m.find())
System.out.println(m.group(1));
}
}
输出:
Apr
根据要匹配的潜在字符串的范围,您可以使用更简单的模式来实现,例如只需要在一对正斜杠之间寻找三个单词字符。这只是一个例子。我并不是说这是满足您需求的最佳表达方式。