REGEXR帮助-如何从字符串中提取年份

问题描述

| 我的字符串中列出了一年
$s = \"Acquired by the University in 1988\";
实际上,这可以在此单行字符串中的任何位置。如何使用regexr提取它?我尝试了\\ d,但是没有用,只是出现了一个错误。 杰森 我在LAMP 5.2中使用preg_match     

解决方法

/(^|\\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
在http://refiddle.com/10k上查看实际运行情况     ,您需要一个正则表达式来匹配四个数字,并且这四个数字必须包含一个完整的单词(即,一个10位数字的字符串包含四个数字,但不是一年。)因此,正则表达式需要像这样包含单词边界:
if (preg_match(\'/\\b\\d{4}\\b/\',$s,$matches)) {
    $year = $matches[0];
}
    ,试试这个代码:
<?php
  $s = \"Acquired by the University in 1988 year.\";
  $yr = preg_replace(\'/^[^\\d]*(\\d{4}).*$/\',\'\\1\',$s);
  var_dump($yr);
?>
输出:
string(4) \"1988\"
但是,此正则表达式的前提是4位数字仅在行中出现一次。     ,好的,您可以使用
\\d{4}
,但是如果字符串中有四位数字还有其他东西的话,那将会中断。 编辑: 问题在于,除了四个数字字符外,实际上没有任何其他标识信息(因为根据您的要求,数字可以在字符串中的任何位置),因此根据您所写的内容,这可能是在范围之外检查返回值的最佳方法。
$str = \"the year is 1988\";
preg_match(\'/\\d{4}/\',$str,$matches);

var_dump($matches);
    ,
preg_match(\'/(\\d{4})/\',$string,$matches);
    ,对于基本年份比赛,假设只有一年
$year = false;
if(preg_match(\"/\\d{4}/\",$match)) {
  $year = $match[0];
}
如果您需要在同一字符串中处理多年的可能性
if(preg_match_all(\"/\\d{4}/\",$matches,PREG_SET_ORDER)) {
  foreach($matches as $match) {
    $year = $match[0];
  }
}
    ,
/(?<!\\d)\\d{4}(?!\\d)/
仅匹配在其前后没有数字的4位数字。
(?<!\\d)
和ѭ14(分别是先行断言和先行断言,可确保在RE的主要部分之前或之后不会出现
\\d
。 实际上,使用ѭ16代替断言可能更明智;这样可以确保一年的开始和结束出现在“单词边界”处。因此,\“ 1337hx0r \”将被适当地忽略。 如果您只想寻找过去一个世纪左右的年份,则可以使用
/\\b(19|20)\\d{2}\\b/
    ,另外,如果您的字符串是这样的:
$date = \"20044Q\";
您可以使用以下代码从任何字符串中提取年份。
preg_match(\'/(?:(?:19|20)[0-9]{2})/\',$date,$matches);
echo $matches[0];
    

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...