如何在指定字符前获得1个字符

时间:2012-08-30 22:26:32

标签: php

我的字符串"**7:00am-4:00pm** M-F" 我要做的是提取"7""4",但这些数字可以在字符串之间不同。 我查找了可以查找":"出现次数的函数,但它们要么返回前半部分,只匹配第一次出现,要么返回true或false。

4 个答案:

答案 0 :(得分:3)

似乎是正则表达式的一个好例子。这是一个应该做的诀窍:

<?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位数的时间,如示例所示。

答案 1 :(得分: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));

它的工作时间是两位数。

答案 2 :(得分:1)

preg_match_all('/([0-9]+):/', '**7:00am-4:00pm** M-F', $matches); 
$numbers = end($matches); 
$start = $numbers[0];
$end = $numbers[1];

答案 3 :(得分:-2)

使用strpos()并减去1:

$index = strpos($text, ":");

if ($index > 0) {
  $value = substr($test, $index - 1, 1);
}