php 从字符串中提取4位数的年份值

wqnecbli  于 2023-05-05  发布在  PHP
关注(0)|答案(7)|浏览(266)

我有一年列在我的字符串

$s = "Acquired by the University in 1988";

在实践中,它可以是这个单行字符串中的任何位置。如何使用正则表达式提取它?我尝试了\d,但没有工作,它只是出现了一个错误。
我在LAMP 5.2中使用preg_match

mrzz3bfm

mrzz3bfm1#

你需要一个正则表达式来匹配四个数字,这四个数字必须包含一个 * 整个单词 *(即一个10位数的字符串包含四位数,但不是一年。)因此,正则表达式需要包括单词边界如下:

if (preg_match('/\b\d{4}\b/', $s, $matches)) {
    $year = $matches[0];
}
1wnzp6jl

1wnzp6jl2#

好吧,你可以使用\d{4},但是如果字符串中有其他四位数的话,那么它就会中断。

编辑:

问题是,除了这四个数字字符之外,实际上没有任何其他标识信息(根据您的要求,数字 * 可以 * 在字符串中的任何位置),因此根据您所写的内容,这可能是您在范围之外检查返回值的最佳方法。

$str = "the year is 1988";
preg_match('/\d{4}/', $str, $matches);

var_dump($matches);
zbdgwd5y

zbdgwd5y3#

/(^|\s)(\d{4})(\s|$)/gm

火柴

Acquired by the University in 1988
The 1945 vintage was superb
1492 columbus sailed the ocean blue

忽略

There were nearly 10000 people there!
Member ID 45678
Phone Number 951-555-2563
1aaf6o9v

1aaf6o9v4#

preg_match('/(\d{4})/', $string, $matches);
ipakzgxi

ipakzgxi5#

对于基本年份匹配,假设只有一年

$year = false;
if(preg_match("/\d{4}/", $string, $match)) {
  $year = $match[0];
}

如果您需要处理同一字符串中包含多个年份的可能性

if(preg_match_all("/\d{4}/", $string, $matches, PREG_SET_ORDER)) {
  foreach($matches as $match) {
    $year = $match[0];
  }
}
xqnpmsa8

xqnpmsa86#

/(?<!\d)\d{4}(?!\d)/只匹配前后没有数字的4位数。
(?<!\d)(?!\d)分别是后向和前向assertions,确保\d不会出现在RE的主要部分之前或之后。
在实践中,使用\b而不是Assert可能更明智;这将确保一年的开始和结束发生在“word boundary”。因此,“1337 hx 0 r”将被适当地忽略。
如果你只想寻找过去一个世纪左右的年份,你可以使用

/\b(19|20)\d{2}\b/
yxyvkwin

yxyvkwin7#

如果你的字符串是这样的:

$date = "20044Q";

您可以使用下面的代码从任何字符串中提取年份。

preg_match('/(?:(?:19|20)[0-9]{2})/', $date, $matches);
echo $matches[0];

相关问题