preg_match_all,check + grab(+ remove)

时间:2014-07-30 19:23:17

标签: php regex preg-match preg-match-all

我在正则表达式中仍然是一个非常棒的人...但是学习和尝试;)

我想检查字符串是否以1800到2100之间的空格+年份数结尾

如果是这样,该函数应该获取该数字(+从字符串中提取/删除它)

这是我到目前为止所做的......当然不起作用。但我必须亲近?

$thestring = 'Hello, the year is 1915';
$year = '';

if (preg_match_all('/ (18|19|20[0-9][0-9])$/', $thestring, $year)) {

  echo $thestring; // should not contain the year or last space anymore

  echo $year[0]; // ?? should be the extracted year (without the space)

}

2 个答案:

答案 0 :(得分:1)

您可以使用此正则表达式:

/ (1[89][0-9]{2}|20[0-9]{2}|2100)$/

<强>代码:

$thestring = 'Hello, the year is 1915';
if (preg_match('/ (1[89][0-9]{2}|20[0-9]{2}|2100)$/', $thestring, $year)) {
  echo $year[1]; // should be the extracted year (without the space)    
}

答案 1 :(得分:0)

使用此表达式:

/ ((?:18|19|20)[0-9]{2})$/

Demo


表达式的问题在于交替的嵌套。想想您何时了解代数中的操作顺序,甚至嵌套多个条件,例如:if(A && (B || C)) {}

你是表达式的捕获组正在字符串末尾寻找以下其中一个:

  • 18
  • 19
  • 2000 - 2099

我更新了它,以18查找1920 00-99 ,然后(?:...)。请注意,我在交替周围使用了非捕获组(...),而不是捕获组{{1}}。如果我没有这样做,你会发现我们会有一个unecessary capture group

  • 1990
  • 19