我有以下字符串输入:
4 Mar to 31 Oct 2015
24 Oct 2015
在这两种情况下,我都需要使用格式dd MMM yyyy
在上面的示例中,预期结果应为:
4 Mar 2015
24 Oct 2015
我尝试了以下内容:^[\d]{1,2}\s[\w]{3}\s(?=to [\w]{3})?[\d]{4}
我甚至不确定正则表达式可以跳过单词并获得单次运行的相关结果。
约束:我不想(不能)使用String方法(即conncate,split等),也不想使用正则表达式替换方法。
答案 0 :(得分:1)
(\d{1,2} )(\w{3} )(?:.(?!\d{4}))*.?(\d{4})
现在连接三个匹配的组。
答案 1 :(得分:0)
@ndn答案是正确的,在用括号捕获组后,你只需要遍历匹配器类似于此的
if (m.matches())
{
int day = Integer.parseInt(m.group(1));
String month = m.group(2);
int year = Integer.parseInt(m.group(3));
}
答案 2 :(得分:0)
答案 3 :(得分:0)
日期所需的一切:
/**
* utiliser parseFrValid(String dateFr)
* @param dateFr
* @return
* @throws InvalidException
*/
public static Date parseFr(String dateFr){
Date date = null;
if (dateFr !=null){
dateFr = dateFr.trim();
String[] dates = dateFr.split("/");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 3){
jour = new Integer(dates[0]).intValue();
mois = new Integer(dates[1]).intValue()-1;
annee = new Integer(dates[2]).intValue();
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}
}
return date;
}
/**
* retrourne une date pour une date string au format jj/MM/yyyy
* @param dateFr
* @return
* @throws InvalidException
*/
public static Date parseFrRazSlash(String dateFr) throws InvalidException{
if(DateUtils.testDate(dateFr))
return RazDateHeure(parseFr(dateFr));
else
throw(new InvalidException("La date est invalide"));
}
public static Date getDateDebut(Date date) {
if(date==null) {
return null;
}
return RazDateHeure(date);
}
public static Date getDateFin(Date date) {
if(date!=null) {
GregorianCalendar gc = new GregorianCalendar();
gc.setTime(date);
gc.add(Calendar.DAY_OF_YEAR, +1);
gc.add(Calendar.SECOND, -1);
return gc.getTime();
}
return null;
}
/**
* utiliser parseFrValid(String dateFr)
* @param dateFr
* @return
*/
public static Date parseFr2(String dateFr){
Date date = null;
if (dateFr !=null){
dateFr = dateFr.trim();
String[] dates = dateFr.split("-");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 3){
jour = new Integer(dates[0]).intValue();
mois = new Integer(dates[1]).intValue()-1;
annee = new Integer(dates[2]).intValue();
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}
}
return date;
}
/**
* utiliser parseFrValid(String dateFr)
* @param dateFr de la forme aaaa-mm-jj
* @return
*/
public static Date parseFr3(String dateFr){
Date date = null;
if (dateFr !=null){
dateFr = dateFr.trim();
String[] dates = dateFr.split("-");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 3){
jour = new Integer(dates[2]).intValue();
mois = new Integer(dates[1]).intValue()-1;
annee = new Integer(dates[0]).intValue();
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}
}
return RazDateHeure(date);
}
/**
*
* @param sqlDate
* @return
*/
public static Date getDateFromSqlString(String sqlDate) {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd hh:mm:ss");
try
{
Date date = sdf.parse(sqlDate);
return date;
}
catch(Exception e)
{
return null;
}
}
/**
*
* @param dateFr
* @return
* @throws InvalidException
*/
public static Date parseFrValid(String dateFr) throws InvalidException{
Date date = null;
if (dateFr !=null && !dateFr.equals("")){
dateFr = dateFr.trim();
String[] dates = dateFr.split("/");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 3){
jour = new Integer(dates[0]).intValue();
mois = new Integer(dates[1]).intValue()-1;
annee = new Integer(dates[2]).intValue();
if (jour < 1 || jour >31){
throw(new InvalidException("Le jour saisi n'est pas correct"));
}
if (mois < 0 || mois >11){
throw(new InvalidException("Le mois saisi n'est pas correct"));
}
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
if (annee > 2050){
throw(new InvalidException("L'année n'est pas correcte."));
}
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}
}
return date;
}
/**
* permet transformer une date en date valide
* @param date
* @return
* @throws InvalidException
*/
public static Date parseFrValid(Date date) throws InvalidException{
return parseFr(toStringJson(date));
}
public static Date parseFrMMAAAAValid(String dateMMAAAA) throws InvalidException{
Date date = null;
if (dateMMAAAA !=null){
dateMMAAAA = dateMMAAAA.trim();
String[] dates = dateMMAAAA.split("/");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 2){
mois = new Integer(dates[0]).intValue()-1;
annee = new Integer(dates[1]).intValue();
if (jour < 1 || jour >31){
throw(new InvalidException("Le jour saisi n'est pas correct"));
}
if (mois < 0 || mois >11){
throw(new InvalidException("Le mois saisi n'est pas correct"));
}
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
if (annee > 2050){
throw(new InvalidException("L'année n'est pas correcte."));
}
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}else if (dates.length > 2){
throw(new InvalidException("La date doit être au format MM/AAAA"));
}
}
return date;
}
public static Date MMAAAAValid(String dateMMAAAA) {
Date date = null;
if (dateMMAAAA !=null){
dateMMAAAA = dateMMAAAA.trim();
String[] dates = dateMMAAAA.split("/");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 2){
mois = new Integer(dates[0]).intValue()-1;
annee = new Integer(dates[1]).intValue();
if (jour < 1 || jour >31){
return null;
}
if (mois < 0 || mois >11){
return null;
}
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
if (annee > 2050 || annee < 1900 ){
return null;
}
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}else if (dates.length > 2){
return null;
}
}
return date;
}
public static Date JJMMAAAValide(String dateFr) {
Date date = null;
if (dateFr !=null){
dateFr = dateFr.trim();
String[] dates = dateFr.split("/");
int jour = 1;
int mois = 1;
int annee = 1900;
if (dates.length == 3){
jour = new Integer(dates[0]).intValue();
mois = new Integer(dates[1]).intValue()-1;
annee = new Integer(dates[2]).intValue();
if (jour < 1 || jour >31){
return null;
}
if (mois < 0 || mois >11){
return null;
}
if (annee<30)
annee+=2000;
else if (annee>=30 && annee <1900)
annee+=1900;
if (annee > 2050 || annee < 1900 ){
return null;
}
GregorianCalendar gc = new GregorianCalendar(Locale.FRENCH);
gc.set(annee, mois, jour);
date = gc.getTime();
}else if (dates.length > 3){
return null;
}
}
return date;
}
public static String toNomFichier(Date date){
if (date!=null){
SimpleDateFormat formatter
= new SimpleDateFormat ("dd-MM-yyyy");
return formatter.format(date);
}
else return "";
}
public static String toStringPattern(Date d, String pattern){
if(d!=null){
SimpleDateFormat formatter = new SimpleDateFormat (pattern);
return formatter.format(d);
}
return "";
}
public static String toStringJson(Date date){
if (date!=null){
SimpleDateFormat formatter
= new SimpleDateFormat ("dd/MM/yyyy");
return formatter.format(date);
}
else return "";
}