我的字符串"**7:00am-4:00pm** M-F"
我想做的是提取"7"
和"4"
,但这些数字可能因字符串而异。我已经查找了可以找到":"
出现次数的函数,但它们要么返回前半部分,要么只匹配第一次出现,要么返回true或false。
这似乎是正则表达式的一个很好的例子。这里有一个应该做的技巧:
<?php
function get_times($str) {
preg_match('#'*'*('d{1,2}):'d'd'w+-('d{1,2}):'d'd'w+'*'*#', $str, $matches);
return array($matches[1], $matches[2]);
}
$strs = array();
$strs[] = "**7:00am-4:00pm** M-F";
$strs[] = "**11:00am-1:00pm** M-F";
$strs[] = "**4:00am-11:00pm** M-F";
$strs[] = "**11:00am-11:00pm** M-F";
foreach ($strs as $str) {
echo $str . "'n";
list($start, $end) = get_times($str);
echo "Start: $start, End: $end'n'n";
}
输出
**7:00am-4:00pm** M-F
Start: 7, End: 4
**11:00am-1:00pm** M-F
Start: 11, End: 1
**4:00am-11:00pm** M-F
Start: 4, End: 11
**11:00am-11:00pm** M-F
Start: 11, End: 11
注意
这将适用于具有1或2位数字的时间,如示例所示。
preg_match_all('/([0-9]+):/', '**7:00am-4:00pm** M-F', $matches);
$numbers = end($matches);
$start = $numbers[0];
$end = $numbers[1];
您可以使用分解函数
$string = "**7:00am-4:00pm** M-F";
$string = explode(":",$string);
$first = preg_replace("/[^0-9]/","", substr($string[0],-2));
$second = preg_replace("/[^0-9]/","", substr($string[1],-2));
它的工作时间是两位数。
使用strpos()
并减去1:
$index = strpos($text, ":");
if ($index > 0) {
$value = substr($test, $index - 1, 1);
}