Replace based on regex and return manipulated string(根据正则表达式替换并返回操作过的字符串)
问题描述
我有一个字符串形式的逻辑查询,例如:
mydate==‘一天前’&;&;mydate>2014-05-16 16:00:00
我需要将日期的每个实例替换为时间戳。我当前的代码可以使用strtotime()将YYYY-MM-DD HH:MM:SSdate-time替换为时间戳:
$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*
推荐答案
尝试使用:
[^-+*=]+s*[-+*=]{1,2}s*('[^']+')s*&&
(regex101)
第一个字符类是任意非运算符1次或更多次,然后是0个或更多空格字符,然后是1或2个运算符(您可能想要或可能不想在这里包括尖括号),然后是0个或更多空格字符,然后捕获您上面所称的'*'。
这篇关于根据正则表达式替换并返回操作过的字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:根据正则表达式替换并返回操作过的字符串
基础教程推荐
- 在PHP中根据W3C规范Unicode 2022-01-01
- PHP 类:全局变量作为类中的属性 2021-01-01
- 有什么方法可以用编码 UTF-8 而不是 Unicode 返回 PHP`json_encode`? 2021-01-01
- YouTube API v3 点赞视频,但计数器不增加 2022-01-01
- Cron Jobs 调用带有变量的 PHP 脚本 2022-01-01
- PHP PDO MySQL 查询 LIKE ->多个关键词 2021-01-01
- 如何在 Laravel 5.3 注册中添加动态下拉列表列? 2021-01-01
- 如何替换eregi() 2022-01-01
- 如何在 Laravel 中使用 React Router? 2022-01-01
- 学说 dbal querybuilder 作为准备好的语句 2022-01-01
