我正在尝试获取preg_match()函数与关联数组匹配的日期的返回值,以返回选定的工作日。代码摘录如下:
$daysArray = array(
"Monday" => "Mon",
"Tuesday" => "Tues",
"Wednesday" => "Wed",
"Thursday" => "Thurs",
"Friday" => "Fri",
"Saturday" => "Sat",
"Sunday" => "Sun"
);
$weekdaysString = implode('|',$daysArray);
if (preg_match('/^\d{1,2}.\d{2}([ap])m\[(' . $weekdaysString . '|-).Only\]$/', $val)) {
echo "Match was found <br />";
} else if (preg_match('/^\d{1,2}.\d{2}([ap])m\[(' . $weekdaysString . '|-)-(' . $weekdaysString . '|-).Only\]$/', $val)) {
echo "Match was found 3<br />";
} else {
echo 'Not found ';
}
$ val是&#39;晚上8:55 [仅限周二至周四]&#39;;
答案 0 :(得分:0)
Php具有以下功能:
echo "Tomorrow is ".date("l", mktime(0, 0, 0, 4, 24, 2014));
//=> Tomorrow is Thursday
如果您想要检查字符串是否包含工作日,您可以执行此操作:
$daysArray = array(
"Monday" => "Mon",
"Tuesday" => "Tues",
"Wednesday" => "Wed",
"Thursday" => "Thurs",
"Friday" => "Fri",
"Saturday" => "Sat",
"Sunday" => "Sun"
);
$val = "The sun is warm!";
foreach($daysArray as $fullDay => $shortDay){
if(strpos(strtolower($val), strtolower($shortDay)){
echo "match on $fullDay!";
}
}
答案 1 :(得分:0)
如果您花时间阅读preg_match和preg_match_all上的文档,您会发现它能够找到匹配并且不仅会返回一个布尔值值。
使用这些新知识,您可以使用匹配项在您评估的字符串中查找工作日。
试试这个:
$matches = array();
if (preg_match_all('/^\d{1,2}.\d{2}([ap])m\[(' . $weekdaysString . '|-).Only\]$/', $val, $matches)) {
echo "Match was found <br />";
// check the array $matches here
} //...
答案 2 :(得分:0)
此代码提供最后一天的名称。这意味着如果$val
仅包含一天,则会显示此日期。您可以通过删除$val
轻松更改此行为,以便在?
包含两天时仅获得结果。如果您想处理更多天数,请将?
替换为*
。
我认为翻转关联数组,在结尾处获取日期名称以及使用array_keys
构建日子模式($dayPat
)更有用。
$val = '8:55pm[Tues-Thurs Only]';
$daysCorr = array(
'Mon' => 'Monday',
'Tues' => 'Tuesday',
'Wed' => 'Wednesday',
'Thurs' => 'Thursday',
'Fri' => 'Friday',
'Sat' => 'Saturday',
'Sun' => 'Sunday');
$dayPat = implode('|', array_keys($daysCorr));
$pattern = <<<EOD
~
^
\d{1,2} : \d{2} [ap]m
\[
(?:
(?: $dayPat ) # first day
(?: - | [ ]&[ ] ) # day delimiter
)? # ? makes the first day optional, remove it if not needed
(?<day> $dayPat )
[ ] # Since the x modifier is used (free space mode),
# you must use [ ] to write a literal space
Only ]
\z # end of the string
~x
EOD;
if (preg_match($pattern, $val, $match))
echo $daysCorr[$match['day']];