我在正则表达式中仍然是一个非常棒的人...但是学习和尝试;)
我想检查字符串是否以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)
}
答案 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})$/
表达式的问题在于交替的嵌套。想想您何时了解代数中的操作顺序,甚至嵌套多个条件,例如:if(A && (B || C)) {}
。
你是表达式的捕获组正在字符串末尾寻找以下其中一个:
18
19
2000
- 2099
我更新了它,以18
查找19
,20
,或 00-99
,然后。(?:...)
。请注意,我在交替周围使用了非捕获组(...)
,而不是捕获组{{1}}。如果我没有这样做,你会发现我们会有一个unecessary capture group: