我必须使用正则表达式检查变量(php,preg_match)是否来自1988年和2011年;我知道如何使用普通的if / else来做,但我想使用正则表达式!
答案 0 :(得分:5)
有时,正则表达式不是唯一的答案:
if( preg_match('/^\d{4}$/', $input) && $input>=1988 && $input<=2011 ){
}
答案 1 :(得分:2)
不会那么容易,因为正则表达式意味着逐个字符匹配。你可以使用这样的东西(可能不是一个好主意)。
/(198[89]|199\d|200\d|201[01])/
答案 2 :(得分:1)
试试这个:
/^[12][90][8901][8901]\z/
答案 3 :(得分:1)
为什么要使用正则表达式执行此操作?
一种解决方案可能与(?:198[8-9]|199[0-9]|200[0-9]|201[0-1])
一致。
答案 4 :(得分:0)
使用preg_replace_callback:
<?php
preg_replace_callback('%([0-9]{4})%', function($match) {
$number = $match[1];
if($number < 1988 || $number > 2011) return; /* Discard the match */
/* Return the replacement here */
}, $input);
在我看来,这是最灵活的解决方案。