1

String が特定のパターンにあるかどうかを確認したい。

たとえば、文字列がパターン 2012-02-20 に一致するかどうかを確認したい。

IE: x が数字の場合、xxxx-xx-xx。

出来ますか?誰かが正規表現を言いました。

4

5 に答える 5

2

この正規表現を使用します\d{4}-\d{2}-\d{2}

使用を確認するため:

yourString.matches(regexString);
于 2013-02-06T10:46:50.640 に答える
2

SimpleDateFormat解析メソッドを使用してそれを行うことができます。

final SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");

boolean matchesDateFormat(String date)
{
    try
    {
        format.parse(date);
        return true;
    }
    catch(ParseException e)
    {
        return false;
    }
}

もちろん、後でとにかく日付を解析する場合は、これをスキップして解析を試みることができます。

于 2013-02-06T10:50:08.757 に答える
2

日付文字列が有効な日付かどうかをテストする場合は、SimpleDateFormatcheck を使用することをお勧めします。その検証に正規表現を使用しないでください。月は 13 ですか? 日付は50ですか?うるう年?

いくつかの例:

public boolean isValidDate(String dateString) {
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");
    try {
        df.parse(dateString);
        return true;
    } catch (ParseException e) {
        return false;
    }
}
于 2013-02-06T10:51:30.020 に答える
1

@burning_LEGION の正規表現を使用して、文字列が 4 桁、ダッシュ-、2 桁、ダッシュ、および 2 桁の正確な形式に従っていることを確認できます。-ただし、文字列が有効な日付を表しているかどうかはチェックしません。指定でき9999-99-99、検証に合格します。

SimpleDateFormatを使用することは、文字列が有効な日付であり、特定の表現形式に従っていることを確認する適切な方法です。SimpleDateFormat は、日付の書式設定とは別に、文字列から日付を解析するためにも使用できます: parse(String), parse(String, ParsePosition).

デフォルトでは、SimpleDateFormat はlenient2013-025-234です。つまり、渡すなどの無意味な日付を許可します。を使用setLenient(boolean lenient)するfalseと、この問題が解決します。

ただし、別の問題は、有効な日付より後のガベージ データも無視することです (例: 2012-03-23garbage#$%$#%)。寛大に設定しても、この問題は解決しません。メソッドで最後の位置を確認する必要がありparse(String, ParsePosition)ます。

SimpleDateFormat dateFormatter = new SimpleDateFormat("yyyy-MM-dd");
// Make the parsing strict - otherwise, it is worse than regex solution
dateFormatter.setLenient(false); 

Date date = null;
ParsePosition pos = new ParsePosition(0);

date = dateFormatter.parse(inputString, pos);

if (date != null && pos.getIndex() == inputString.length()) {
    // These 3 points are ensured:
    // - The string only contains the date.
    // - The date follows the format strictly.
    // - And the date is a valid one.
} else {
    // Valid date but string contains other garbage
    // Or the string has invalid date or garbage
}

SimpleDateFormat2013-1-5これは妥当な寛大さだと思います。これを望まない場合は、String をparseメソッドにプラグインする前に、正規表現に対してチェックを行うことができます。

于 2013-02-06T11:43:29.620 に答える
0

次のコードを確認できます。

public void test() {
    String REG_EXP = "(\\d{4}-[0,1]?\\d{1}-[0,1,2,3]?\\d{1})"; //yyyy-mm-dd formate this can not check boundary condition something like this... 1981-02-30 
    String REG_EXP1 = "(\\d{4}-\\d{2}-\\d{2})"; // if u just want xxxx-xx-xx where x is number 
    String input = "date1 1981-09-06 wrong date 9999-22-22 date2 1981-9-09 date3 1981-11-1 date4"; 
    Pattern pattern = Pattern.compile(REG_EXP); 
    Matcher matcher = pattern.matcher(input); 
    while (matcher.find()) { 
       System.out.println(matcher.group());
    }
}
于 2013-02-06T12:29:34.310 に答える