【发布时间】:2014-07-05 06:07:06
【问题描述】:
我有一个字符串形式的逻辑查询,例如:
mydate == '一天前' && mydate > 2014-05-16 16:00:00
我需要用时间戳替换日期的每个实例。我当前的代码可以使用strtotime() 将YYYY-MM-DD HH:MM:SS 日期时间替换为时间戳:
$my_string = "mydate == 'one day ago' && mydate > 2014-05-16 16:00:00";
// Pattern: *YYYY-MM-DD HH:MM:SS*
$pattern = '((?:2|1)\\d{3}(?:-|\\/)(?:(?:0[1-9])|(?:1[0-2]))(?:-|\\/)(?:(?:0[1-9])|(?:[1-2][0-9])|(?:3[0-1]))(?:T|\\s)(?:(?:[0-1][0-9])|(?:2[0-3])):(?:[0-5][0-9]):(?:[0-5][0-9]))';
$my_string = preg_replace_callback($pattern, function($m){return strtotime($m[0]);}, $my_string);
echo($my_string);
输出:
mydate == '一天前' && mydate > 1400252400
但是,我也想支持自然语言相关短语。查询字符串始终是一个集合结构:
mydate
OPERATOR'DATE' && mydateOPERATOR'DATE'...
我想做的是找到变量mydate跳过运算符然后获取单引号内的内容,将strtotime()应用于单引号的内容,然后替换日期(包括单引号) 与整数。例如:
输入:
mydate == '一天前' && mydate > '2014-05-16 16:00:00'
目标进程:
mydate ==
timetostr('one day ago')&& mydate >timetostr('2014-05-16 16:00:00')
输出:
mydate == 123123123123 && mydate > 1400252400
注意我的当前输入和新输入之间的区别,现在我希望两个实例都有单引号,而不是使用仅为日期时间字符串设计的正则表达式。
如何按照以下方式制作正则表达式 变量名*'*'
其中 * 是任意字符,取 '' 的内容并返回 variable_name*
【问题讨论】:
-
这一切的最终目标是什么?
-
@CasimiretHippolyte 运行逻辑/查询导致真假
标签: php regex replace preg-replace preg-replace-callback