在列表中的时间字符串之间插入连字符

时间:2011-02-20 17:22:23

标签: php regex string

我需要一些格式化功能的帮助。我需要能够获取输入(函数参数)并将字符串格式化为其他内容。这是我的选择:

7am7pm
10am10pm
OFF

因此,根据所选内容,我希望正则表达式符合以下输出条件:

7am-7pm
10am-10pm
OFF

换句话说,我需要在时间之间插入一个连字符,原文可以是[0-9]{2}[0-9]{1},所以我猜的是像[0-9]{1,2}这样的东西,但我是不确定如何创建函数并在PHP中使用它。

4 个答案:

答案 0 :(得分:3)

尝试

preg_replace("/(\d{1,2}(am|pm))(\d{1,2}(am|pm))/", "$1-$3", $string);

演示:http://codepad.org/BBwW4eEE

答案 1 :(得分:3)

这是使用assertions的版本,所以它只需要注入一个字符:

return preg_replace('/(?<=[a-z])(?=\d)/', "-", $arg);

它仅查找字符串中前面带有字母?<=且后跟数字?=的位置。

答案 2 :(得分:1)

这应该处理你的时间(你用简单的if语句管理“OFF”):

$output = preg_replace('/^([0-9]{1,2}(am|pm))-?([0-9]{1,2}(am|pm))$/i', '$1-$3', $input);

答案 3 :(得分:0)

这个怎么样:

function format_date($date)
{
if( $date == 'off' ) return 'off';
return preg_replace( '/^(\d{1,2}\w{2})(\d{1,2}\w{2})$/' , '${1}-${2}' , $date );
}

我假设你说输入看起来像第一个框,应该像第二个那样格式化?