我有这个中间有一年的字符串。我想提取年份以及它之前和之后的所有内容。
我正在使用以下单个正则表达式:
- 提取日期:
'/\d{4}\b/'
- 提取日期之前的所有内容:(
'/(.*?)\d{4}\b/';
我不知道如何从结果中排除日期,但这不是问题......) - 提取日期之后的所有内容:(
'/d{4}\/(.*?)\b/'
这个不起作用)
$str = 'The year is 2048, and there are flying forks.';
$regex = '/(.*)\b\d{4}\b(.*)/';
preg_match($regex,$str,$matches);
$before = isset($matches[1])?$matches[1]:'';
$after = isset($matches[2])?$matches[2]:'';
echo $before.$after;
编辑:回答 OP(Luis')关于拥有多年的评论:
$str = 'The year is 2048 and there are 4096 flying forks from 1999.';
$regex = '/(\b\d{4}\b)/';
$split = preg_split($regex,$str,-1,PREG_SPLIT_DELIM_CAPTURE);
print_r($split);
$split
提供一个数组,如:
Array
(
[0] => The year is
[1] => 2048
[2] => and there are
[3] => 4096
[4] => flying forks from
[5] => 1999
[6] => .
)
第二个示例还显示了对可解析数据的假设所涉及的风险(请注意,4096 处的分叉数与 4 位数年份相匹配)。