php - PHP从字符串中查找月份和年份?
问题描述
这是我迄今为止从任何类型的字符串中尝试过的。
<?php
$variable = [
'Well year is 1967 month jan',
'year is 1876 but month January',
'HOLLA April Evening 2017',
'DOLLA-May 2020',
'OH-YESApril 2019 (IGNORE)',
'Just a sample String without year ok lets just add 1'
];
foreach ($variable as $value) {
if(ContainsNumbers($value)){
$input = preg_replace('/^[^\d]*(\d{4}).*$/', '\1', $value);
$input = (int)$input;
if($input>1000 && $input<2100)
{
var_dump($input);
}
}
}
function ContainsNumbers($String){
return preg_match('/\\d/', $String) > 0;
}
?>
这是上面代码的输出
int(1967)
int(1876)
int(2017)
int(2020)
int(2019)
我现在唯一想要的是从字符串中获取月份。一个月以来,我从这个链接获得了帮助,但到目前为止还没有运气:-我不知道要添加什么$data
$str = 'December 2012 Name: Jack Brown';
$ptr = "/^(?P<month>:Jan(?:uary)?|Feb(?:ruary)?|Dec(?:ember)?) (?P<year>:19[7-9]\d|2\d{3}) (Name:(?P<name>(.*)))/";
var_dumb(preg_match($ptr, $str, $data););
解决方案
传统上,几乎每个人都将第三个参数称为preg_match
$matches
,所以我将在这里使用命名法。
如果 RegEx 匹配,第三个参数将是一个数组,其中包含每个项目的数字索引,以及命名索引(如果您有任何命名匹配)。所以你正在寻找:
if(preg_match($ptr, $str, $matches)){
var_dump($matches);
}
这会给你:
Array
(
[0] => December 2012 Name: Jack Brown
[month] => December
[1] => December
[year] => 2012
[2] => 2012
[3] => Name: Jack Brown
[name] => Jack Brown
[4] => Jack Brown
[5] => Jack Brown
)
推荐阅读
- ios - NEHotspotConfigurationManager 收到此警报:“无法加入网络
" 而错误为零 - java - 使用 java 流从 HashMap 获取特定键
- pandoc - 为什么 pandoc
在 html 到 asciidoc 转换时将“”转换为“+ \n”? - php - 我如何在 Symfony 的订阅者中获取 entityManager
- kubernetes - 如何使用 kubectl 代理访问集群外的服务?
- python - 如何使用新数据运行朴素贝叶斯分类器
- node.js - Express.js:CORS 策略阻止 Stripe API 请求
- php - php返回空值的最佳方法
- amazon-web-services - 使用旧 EBS 卷启动 AWS Spot 实例
- .net-core - 在 Linux 上使用 SkiaSharp 1.68 的 DllNotFoundException