mmddの形式の誕生日から、星座1を求める正規表現。
月日
0101 から 1231 にマッチ3する正規表現。
\A(?:0(?:[13578](?:0[123456789]|[12]\d|3[01])|[469](?:0[123456789]|[12]\d|30)|2(?:0[123456789]|[12]\d))|1(?:[02](?:0[123456789]|[12]\d|3[01])|1(?:0[123456789]|[12]\d|30)))\z
牡羊座
0321 から 0419 にマッチする正規表現。
\A0(?:3(?:2[123456789]|3[01])|4(?:0[123456789]|1\d))\z
牡牛座
0420 から 0520 にマッチする正規表現。
\A0(?:5(?:0[123456789]|1\d|20)|4(?:2\d|30))\z
双子座
0521 から 0621 にマッチする正規表現。
\A0(?:6(?:0[123456789]|2[01]|1\d)|5(?:2[123456789]|3[01]))\z
蟹座
0622 から 0722 にマッチする正規表現。
\A0(?:7(?:0[123456789]|2[012]|1\d)|6(?:2[23456789]|30))\z
獅子座
0723 から 0822 にマッチする正規表現。
\A0(?:8(?:0[123456789]|2[012]|1\d)|7(?:2[3456789]|3[01]))\z
乙女座
0823 から 0922 にマッチする正規表現。
\A0(?:9(?:0[123456789]|2[012]|1\d)|8(?:2[3456789]|3[01]))\z
天秤座
0923 から 1023 にマッチする正規表現。
\A(?:10(?:0[123456789]|2[0123]|1\d)|09(?:2[3456789]|30))\z
蠍座
1024 から 1121 にマッチする正規表現。
\A1(?:1(?:0[123456789]|2[01]|1\d)|0(?:2[456789]|3[01]))\z
射手座
1122 から 1221 にマッチする正規表現。
\A1(?:2(?:0[123456789]|2[01]|1\d)|1(?:2[23456789]|30))\z
山羊座
1222 から 0119 にマッチする正規表現。
\A(?:12(?:2[23456789]|3[01])|01(?:0[123456789]|1\d))\z
水瓶座
0120 から 0218 にマッチする正規表現。
\A0(?:2(?:0[123456789]|1[012345678])|1(?:3[01]|2\d))\z
魚座
0219 から 0320 にマッチ3する正規表現。
\A0(?:3(?:0[123456789]|1\d|20)|2(?:2\d|19))\z
サンプル
<?php
error_reporting(-1);
array_shift($argv);
foreach ($argv as $day) {
print $day.":\t";
if (preg_match("/\A(?:0(?:[13578](?:0[123456789]|[12]\d|3[01])|[469](?:0[123456789]|[12]\d|30)|2(?:0[123456789]|[12]\d))|1(?:[02](?:0[123456789]|[12]\d|3[01])|1(?:0[123456789]|[12]\d|30)))\z/", $day)) {
print '日付です'.PHP_EOL;
if (preg_match("/\A0(?:3(?:2[123456789]|3[01])|4(?:0[123456789]|1\d))\z/", $day)) {
print '牡羊座'.PHP_EOL;
}
if (preg_match("/\A0(?:5(?:0[123456789]|1\d|20)|4(?:2\d|30))\z/", $day)) {
print '牡牛座'.PHP_EOL;
}
if (preg_match("/\A0(?:6(?:0[123456789]|2[01]|1\d)|5(?:2[123456789]|3[01]))\z/", $day)) {
print '双子座'.PHP_EOL;
}
if (preg_match("/\A0(?:7(?:0[123456789]|2[012]|1\d)|6(?:2[23456789]|30))\z/", $day)) {
print '蟹座'.PHP_EOL;
}
if (preg_match("/\A0(?:8(?:0[123456789]|2[012]|1\d)|7(?:2[3456789]|3[01]))\z/", $day)) {
print '獅子座'.PHP_EOL;
}
if (preg_match("/\A0(?:9(?:0[123456789]|2[012]|1\d)|8(?:2[3456789]|3[01]))\z/", $day)) {
print '乙女座'.PHP_EOL;
}
if (preg_match("/\A(?:10(?:0[123456789]|2[0123]|1\d)|09(?:2[3456789]|30))\z/", $day)) {
print '天秤座'.PHP_EOL;
}
if (preg_match("/\A1(?:1(?:0[123456789]|2[01]|1\d)|0(?:2[456789]|3[01]))\z/", $day)) {
print '蟹座'.PHP_EOL;
}
if (preg_match("/\A1(?:2(?:0[123456789]|2[01]|1\d)|1(?:2[23456789]|30))\z/", $day)) {
print '射手座'.PHP_EOL;
}
if (preg_match("/\A(?:12(?:2[23456789]|3[01])|01(?:0[123456789]|1\d))\z/", $day)) {
print '山羊座'.PHP_EOL;
}
if (preg_match("/\A0(?:2(?:0[123456789]|1[012345678])|1(?:3[01]|2\d))\z/", $day)) {
print '水瓶座'.PHP_EOL;
}
if (preg_match("/\A0(?:3(?:0[123456789]|1\d|20)|2(?:2\d|19))\z/", $day)) {
print '魚座'.PHP_EOL;
}
} else {
print '日付ではありません'.PHP_EOL;
}
}
$ php -v
PHP 5.6.14 (cli) (built: Oct 3 2015 14:54:13)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
$ php test_regexp.php 9999 1020 0505 0214 1224 0931
9999: 日付ではありません
1020: 日付です
天秤座
0505: 日付です
牡牛座
0214: 日付です
水瓶座
1224: 日付です
山羊座
0931: 日付ではありません
おわりです。