Как сопоставить этот формат даты с регулярным выражением? - PullRequest
1 голос
/ 13 мая 2011

Привет всем мастерам регулярных выражений, я знаю, что у вас есть обходной путь в отношении моей проблемы. хехе

02-May-2011

или

22-May-2011

или

2-May-2011

(дд-MMM-YYYY) с гггг не принимает никаких других символов, кроме цифры

Ответы [ 6 ]

5 голосов
/ 13 мая 2011
[0-9]{1,2}/[a-zA-Z]{3}/[0-9]{4}

Предполагается, что месяц представляет собой трехбуквенную версию: например, январь, февраль, март.

Обновленная версия, чтобы соответствовать изменениям в вопросе:

[0-9]{1,2}-[a-zA-Z]{3}-[0-9]{4}

Как уже упоминалось, это на самом деле не проверяет дату, а просто проверяет, что строка соответствует формату: 1 или 2 числа, тире, 3 буквы, тире, 4 цифры .

3 голосов
/ 13 мая 2011
^\d{1,2}/[a-zA-Z]+/\d{4}$

Возможно, это то, что вы ищете. Хотя технически правильный:

/^([12]\d|3[01])/(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sep(t(ember)?)?|Oct(ober)?|Nov(ember)?|Dec(ember)?)/\d{4}$/i

Извините, что не проверил февраль и количество дней в месяце, но есть некоторые вещи, которые просто не стоит делать в регулярных выражениях;)

0 голосов
/ 27 мая 2019

Так как это дата, когда вы пытаетесь найти совпадение, использование SimpleDateFormat вместо проверки совпадения на основе регулярных выражений должно быть подходящим решением. Надеемся, что приведенный ниже фрагмент должен выполнить эту работу.

public static boolean dateFormatValidate(String strDate,String dateFormat)
{
    SimpleDateFormat formatter = new SimpleDateFormat(dateFormat);
    String strParsed = null;
    Date parsed =null;

    try
    {
        parsed = formatter.parse(strDate);
        strParsed = formatter.format(parsed);
    }
    catch (ParseException e)
    {
        MYLogger.logger.info(e.getMessage());
    }

    return strDate.equals(strParsed);
}
0 голосов
/ 12 августа 2016

Хорошо, вот почти все возможные варианты регулярных выражений шаблона Date:

private final static Pattern DATE_PATTERN_1 = 

        Pattern.compile (
            "(?:Sun|Mon|Tue|Wed|Thu|Fri|Sat) " + 
            "(?:Jan|Feb|Mar|Apr|May|June?|July?|Aug|Sept?|Oct|Nov|Dec) " + 
            "\\d\\d \\d\\d:\\d\\d:\\d\\d \\S+ \\d\\d\\d\\d", Pattern.CASE_INSENSITIVE);

private final static Pattern DATE_PATTERN_2 = 
        Pattern.compile (
            "\\d{4}.\\d{2}.\\d{2}", Pattern.CASE_INSENSITIVE);

private final static Pattern DATE_PATTERN_3 = 
        Pattern.compile (
            "\\d{2}.\\d{2}.\\d{4}", Pattern.CASE_INSENSITIVE);

private final static Pattern DATE_PATTERN_4 = 
        Pattern.compile (
            "([0-9]{4})([0-9]{2})([0-9]{2})", Pattern.CASE_INSENSITIVE);        

private final static Pattern DATE_PATTERN_5 = 
        Pattern.compile (
            "^([12]\\d|3[01]).(Jan(uary)?|Feb(ruary)?|Mar(ch)?|Apr(il)?|May|June?|July?|Aug(ust)?|Sep(t(ember)?)?|Oct(ober)?|Nov(ember)?|Dec(ember)?).\\d{4})$", Pattern.CASE_INSENSITIVE); 

Обратите внимание, что "." символ обозначает любой символ.

0 голосов
/ 30 июля 2013
   /**
     * Created with IntelliJ IDEA.
     * User: S34N
     * Date: 2013/07/30
     * Time: 8:21 AM
     * To change this template use File | Settings | File Templates.
     */



    //Import the required classes/packages
    import javax.swing.*;
    import java.text.DateFormat;
    import java.text.SimpleDateFormat;
    import java.util.Date;

    public class dateInputScan {

        public static void main(String args[]) {

            dateInputScan run = new dateInputScan();
            run.dateInputScan();
        }

        public void dateInputScan() {

            //Instantiating variables
            String lvarStrDateOfTransaction = null;
            DateFormat formatter = null;
            Date lvarObjDateOfTransaction = null;

            //Use one of the following date formats.
            lvarStrDateOfTransaction = "29/07/2013";
            //lvarStrDateOfTransaction = "29-07-2013";
            //lvarStrDateOfTransaction = "20130729";
            //lvarStrDateOfTransaction = "2013-07-29";
            //lvarStrDateOfTransaction = "29/07/2013";

            //You can also add your own regex (Regular Expression)
            if (lvarStrDateOfTransaction.matches("([0-9]{2})/([0-9]{2})/([0-9]{4})")) {
                formatter = new SimpleDateFormat("dd/MM/yyyy");
            } else if (lvarStrDateOfTransaction.matches("([0-9]{2})-([0-9]{2})-([0-9]{4})")) {
                formatter = new SimpleDateFormat("dd-MM-yyyy");
            } else if (lvarStrDateOfTransaction.matches("([0-9]{4})([0-9]{2})([0-9]{2})")) {
                formatter = new SimpleDateFormat("yyyyMMdd");
            } else if (lvarStrDateOfTransaction.matches("([0-9]{4})-([0-9]{2})-([0-9]{2})")) {
                formatter = new SimpleDateFormat("yyyy-MM-dd");
            } else if (lvarStrDateOfTransaction.matches("([0-9]{4})/([0-9]{2})/([0-9]{2})")) {
                formatter = new SimpleDateFormat("yyyy/MM/dd");
            }

            try {
                lvarObjDateOfTransaction = formatter.parse(lvarStrDateOfTransaction);
                JOptionPane.showMessageDialog(null, "Date: " + lvarObjDateOfTransaction);

            } catch (Exception ex) {    //Catch the Exception in case the format is not found.
                JOptionPane.showMessageDialog(null, ex);
            }
        }
    }
0 голосов
/ 13 мая 2011

Используйте SimpleDateFormat вместо регулярного выражения. Прочитайте учебник по http://download.oracle.com/javase/tutorial/i18n/format/simpleDateFormat.html для получения дополнительной информации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...