正确的preg_match用于获取字符串的结尾

时间:2017-04-21 01:57:46

标签: php regex

我遇到正则表达式问题,我的目标是获取字符串的结尾,将它放在if else语句中。例如,我有一个2017_annualoff的字符串我正在使用我的preg_match在if else语句中取样annualoff,就像这样。

else if (preg_match("/^(.*?)\annualoff/", $request->filters['types.created_at']))  {
            return "Hello annual off";
            // $trimmedFilter =  str_replace('_annualoff', '', $request->filters['types.created_at']);
            // $splitYear = $trimmedFilter;
            // $filtered_table = $filtered_table->where('methods.created_at', 'LIKE', '%' . '2016-11-16' . '%');
          }

但是当我的其他代码块通过时,它不会在该块中通过,这是if else语句的其余部分。

if(preg_match("/^(.*?)\monthlyoff/", $request->filters['types.created_at'])) {

} else if (preg_match("/^(.*?)\quarteroff/", $request->filters['types.created_at'])) {

} else if (preg_match("/^(.*?)\annualoff/", $request->filters['types.created_at']))  {
            return "Hello annual off";
}

我尝试将yearoff preg匹配到像“99”那样简单的东西,然后是样本字符串2017_99,然后就完成了。所以我认为我的正则表达式一定有问题。 你能帮忙解决这个问题吗?或者为什么不通过?什么是正确的正则表达式?同时当我使用不同的字符串时,它会通过。

2 个答案:

答案 0 :(得分:0)

您可以使用$匹配字符串末尾的字符

<?php

$created_at = trim($request->filters['types.created_at']);

if (preg_match("/monthlyoff$/", $created_at)) { }

else if (preg_match("/quarteroff$/", $created_at)) { }

else if (preg_match("/annualoff$/", $created_at)) { }

答案 1 :(得分:0)

正则表达式 ^[\d]{4}\_monthlyoff$这将匹配4digits,然后是_,然后是您的字符串

示例: 2017_monthlyoff

<?php
ini_set('display_errors', 1);

if(preg_match("/^[\d]{4}\_monthlyoff$/", $request->filters['types.created_at'])) {

} else if (preg_match("/^[\d]{4}\_quarteroff$/", $request->filters['types.created_at'])) {

} else if (preg_match("/^[\d]{4}\_annualoff$/", $request->filters['types.created_at']))  {
            return "Hello annual off";
}