12

次のようなCron 時間式に一致する正規表現を記述する必要があります。

  • 28 2 7 1 1
  • 28 2 7 1 *
  • 28 2 7 * *
  • 28 2 * * *
  • 28 * * * *
  • * * * * *
4

14 に答える 14

14

書き終わったばかりなので、これが私のものです。お役に立てば幸いです。

これにより、* または */num を許可し、数値を論理範囲 (月の場合は 1 ~ 12、時間の場合は 0 ~ 24 など) に制限する必要があります。

/^(\*|([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])|\*\/([0-9]|1[0-9]|2[0-9]|3[0-9]|4[0-9]|5[0-9])) (\*|([0-9]|1[0-9]|2[0-3])|\*\/([0-9]|1[0-9]|2[0-3])) (\*|([1-9]|1[0-9]|2[0-9]|3[0-1])|\*\/([1-9]|1[0-9]|2[0-9]|3[0-1])) (\*|([1-9]|1[0-2])|\*\/([1-9]|1[0-2])) (\*|([0-6])|\*\/([0-6]))$/
于 2013-07-25T12:50:06.337 に答える
6

しばらく時間がかかりました:D このドキュメントに基づいて検証します: http://en.wikipedia.org/wiki/Cron ただし、曜日と日付を指定できない、つまり指定できることは考慮されていませんこの正規表現によると両方。これは boost::regex に使用できます

    (((([*])|(((([0-5])?[0-9])((-(([0-5])?[0-9])))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))(,(((([*])|(((([0-5])?[0-9])((-(([0-5])?[0-9])))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?)))* (((([*])|(((((([0-1])?[0-9]))|(([2][0-3])))((-(((([0-1])?[0-9]))|(([2][0-3])))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))(,(((([*])|(((((([0-1])?[0-9]))|(([2][0-3])))((-(((([0-1])?[0-9]))|(([2][0-3])))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?)))* (((((((([*])|(((((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))((-(((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))|(L)|(((((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))W))))(,(((((([*])|(((((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))((-(((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))|(L)|(((((([1-2])?[0-9]))|(([3][0-1]))|(([1-9])))W)))))*)|([?])) (((([*])|((((([1-9]))|(([1][0-2])))((-((([1-9]))|(([1][0-2])))))?))|((((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEP)|(OKT)|(NOV)|(DEC))((-((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEP)|(OKT)|(NOV)|(DEC))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))(,(((([*])|((((([1-9]))|(([1][0-2])))((-((([1-9]))|(([1][0-2])))))?))|((((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEP)|(OKT)|(NOV)|(DEC))((-((JAN)|(FEB)|(MAR)|(APR)|(MAY)|(JUN)|(JUL)|(AUG)|(SEP)|(OKT)|(NOV)|(DEC))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?)))* (((((((([*])|((([0-6])((-([0-6])))?))|((((SUN)|(MON)|(TUE)|(WED)|(THU)|(FRI)|(SAT))((-((SUN)|(MON)|(TUE)|(WED)|(THU)|(FRI)|(SAT))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))|((([0-6])L))|(W)|(([#][1-5]))))(,(((((([*])|((([0-6])((-([0-6])))?))|((((SUN)|(MON)|(TUE)|(WED)|(THU)|(FRI)|(SAT))((-((SUN)|(MON)|(TUE)|(WED)|(THU)|(FRI)|(SAT))))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))|((([0-6])L))|(W)|(([#][1-5])))))*)|([?]))((( (((([*])|((([1-2][0-9][0-9][0-9])((-([1-2][0-9][0-9][0-9])))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?))(,(((([*])|((([1-2][0-9][0-9][0-9])((-([1-2][0-9][0-9][0-9])))?)))((/(([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?([0-9])?[0-9])))?)))*))?)
于 2013-09-27T09:10:04.243 に答える
1

実行に使用するプログラムを知らずに正確な正規表現を作成することは困難ですが、これは機能するはずです。

(28|\*) (2|\*) (7|\*) (1|\*) (1|\*)
于 2013-01-07T20:02:22.460 に答える
0

おそらくうまくいく可能性のある最も単純なことをする

"^28 2 7 1 1$|^28 2 7 1 \*$|^28 2 7 \* \*$|^28 2 \* \* \*$|^28 \* \* \* \*$|^\* \* \* \* \*$"

http://rubular.com/r/Z0hfT5X9K8

于 2013-01-07T20:03:20.403 に答える
0

許容値を検証したい人向け

^(((([1-5]?[0-9],)+[1-5]?[0-9]|([1-5]?[0-9](\/|-)[1-5]?[0-9](\/\d+)?)|[1-5]?[0-9]|\*(\/\d+)?) )((([1-5]?[0-9],)+[1-5]?[0-9]|([1-5]?[0-9](\/|-)[1-5]?[0-9](\/\d+)?)|[1-5]?[0-9]|\*(\/\d+)?) )((((2[0-3]|1[0-9]|[0-9]),)+(2[0-3]|1[0-9]|[0-9])|((2[0-3]|1[0-9]|[0-9])(\/|-)(2[0-3]|1[0-9]|[0-9])(\/\d+)?)|(2[0-3]|1[0-9]|[0-9])|\*(\/\d+)?) )((((3[01]|[12][0-9]|[1-9]),)+(3[01]|[12][0-9]|[1-9])|((3[01]|[12][0-9]|[1-9])(\/|-)(3[01]|[12][0-9]|[1-9])(\/\d+)?)|(3[01]|[12][0-9]|[1-9])|\*(\/\d+)?) )((((1[0-2]|[1-9]),)+(3[01]|[12][0-9]|[1-9])|((1[0-2]|[1-9])(\/|-)(1[0-2]|[1-9])(\/\d+)?)|(1[0-2]|[1-9])|[A-Z]{3}|\*(\/\d+)?) )((([0-6],)+[0-6]|([0-6](\/|-)[0-6]((\/|-)\d+)?)|[0-6]|\*(\/\d+)?|[A-Z]{3}?)))$|(@(annually|yearly|monthly|weekly|daily|hourly|reboot))|(@every (\d+(ns|us|µs|ms|s|m|h))+)
于 2022-02-16T13:00:00.720 に答える
0

各文字クラスは 1 つの文字にしか一致できないため、現在の正規表現は 5 文字にのみ一致します。数字または*各位置の間に 1 つ以上のスペースを入れて一致させたい位置ごとに、次のようにしてそれを行うことができます。

(28|\*) +[2*] +[7*] +[1*] +[1*]

最初の数字は 2 桁なので、文字クラスの代わりに代替を使用する必要があることに注意してください。

また、文字列の一部だけに一致しないように、正規表現にいくつかのアンカーを追加することもできます。これが必要な場合は^、最初と$最後に追加します。

于 2013-01-07T20:02:10.230 に答える