在PHP中用括号查找文本

时间:2014-08-24 01:23:27

标签: php

我将值从一个页面传递到另一个页面,如

日期+开始时间+结束时间

将采用2014年8月24日Sun02:00am12:00pm格式。

我正在使用类似substr($_POST['datetimevalue'], 0, -11);的内容去取消连接值,但我遇到了日期大小的问题,因为有时候月份的大小可能会变得更小或更多。

我可以切换到格式开始时间+结束时间+日期,但它仍然是一个坏主意。

我希望将格式更改为日期+ {开始时间} + [结束时间],以便它将像2014年8月24日太阳{02:00 am} [12:00 pm]

如何找到{ }中的值和[ ]中的值?

2 个答案:

答案 0 :(得分:1)

我建议您使用regular expression

$value = '24th of August 2014 Sun{02:00am}[12:00pm]';
preg_match('/(.+){(.+)}\[(.+)\]/', $value, $matches);;
list( , $date, $start, $end ) = $matches;

<强> DEMO

答案 1 :(得分:0)

我认为这个功能对你有用。

function findByDelimiters ($string, $start, $end) {

    $initial_pos = strpos($string, $start);

    if ($initial_pos !== false) {

        $substr = substr($string, $initial_pos + strlen($start));

        $final_pos = strpos($substr, $end);

        if ($final_pos !== false) {
            return trim(substr($substr, 0, $final_pos));
        } else {
            throw new Exception('Delimiter opened, but not closed (Input: ' . $string . ', open: ' . $start . ', expected close: ' . $end);
        }
    }

    return false;
}

使用示例:

findByDelimiters ('August 2014 Sun{02:00am}[12:00pm]', '{', '}') // Prints: 02:00am
findByDelimiters ('August 2014 Sun{02:00am}[12:00pm]', '[', ']') // Prints: 12:00pm