我遇到正则表达式问题,我的目标是获取字符串的结尾,将它放在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,然后就完成了。所以我认为我的正则表达式一定有问题。 你能帮忙解决这个问题吗?或者为什么不通过?什么是正确的正则表达式?同时当我使用不同的字符串时,它会通过。
答案 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";
}