我有一年列在我的字符串
$s = "Acquired by the University in 1988";
在实践中,它可以是这个单行字符串中的任何位置。如何使用正则表达式提取它?我尝试了\d,但没有工作,它只是出现了一个错误。我在LAMP 5.2中使用preg_match
\d
mrzz3bfm1#
你需要一个正则表达式来匹配四个数字,这四个数字必须包含一个 * 整个单词 *(即一个10位数的字符串包含四位数,但不是一年。)因此,正则表达式需要包括单词边界如下:
if (preg_match('/\b\d{4}\b/', $s, $matches)) { $year = $matches[0]; }
1wnzp6jl2#
好吧,你可以使用\d{4},但是如果字符串中有其他四位数的话,那么它就会中断。
\d{4}
编辑:
问题是,除了这四个数字字符之外,实际上没有任何其他标识信息(根据您的要求,数字 * 可以 * 在字符串中的任何位置),因此根据您所写的内容,这可能是您在范围之外检查返回值的最佳方法。
$str = "the year is 1988"; preg_match('/\d{4}/', $str, $matches); var_dump($matches);
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
1aaf6o9v4#
preg_match('/(\d{4})/', $string, $matches);
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]; } }
xqnpmsa86#
/(?<!\d)\d{4}(?!\d)/只匹配前后没有数字的4位数。(?<!\d)和(?!\d)分别是后向和前向assertions,确保\d不会出现在RE的主要部分之前或之后。在实践中,使用\b而不是Assert可能更明智;这将确保一年的开始和结束发生在“word boundary”。因此,“1337 hx 0 r”将被适当地忽略。如果你只想寻找过去一个世纪左右的年份,你可以使用
/(?<!\d)\d{4}(?!\d)/
(?<!\d)
(?!\d)
\b
/\b(19|20)\d{2}\b/
yxyvkwin7#
如果你的字符串是这样的:
$date = "20044Q";
您可以使用下面的代码从任何字符串中提取年份。
preg_match('/(?:(?:19|20)[0-9]{2})/', $date, $matches); echo $matches[0];
7条答案
按热度按时间mrzz3bfm1#
你需要一个正则表达式来匹配四个数字,这四个数字必须包含一个 * 整个单词 *(即一个10位数的字符串包含四位数,但不是一年。)因此,正则表达式需要包括单词边界如下:
1wnzp6jl2#
好吧,你可以使用
\d{4}
,但是如果字符串中有其他四位数的话,那么它就会中断。编辑:
问题是,除了这四个数字字符之外,实际上没有任何其他标识信息(根据您的要求,数字 * 可以 * 在字符串中的任何位置),因此根据您所写的内容,这可能是您在范围之外检查返回值的最佳方法。
zbdgwd5y3#
火柴
忽略
1aaf6o9v4#
ipakzgxi5#
对于基本年份匹配,假设只有一年
如果您需要处理同一字符串中包含多个年份的可能性
xqnpmsa86#
/(?<!\d)\d{4}(?!\d)/
只匹配前后没有数字的4位数。(?<!\d)
和(?!\d)
分别是后向和前向assertions,确保\d
不会出现在RE的主要部分之前或之后。在实践中,使用
\b
而不是Assert可能更明智;这将确保一年的开始和结束发生在“word boundary”。因此,“1337 hx 0 r”将被适当地忽略。如果你只想寻找过去一个世纪左右的年份,你可以使用
yxyvkwin7#
如果你的字符串是这样的:
您可以使用下面的代码从任何字符串中提取年份。