PHP正则表达式匹配包含一年的句子
我需要一个正则表达式,可以从包含一年的文本中提取句子 示例文本: 接着,1988年布雷迪一家又回来了 又一次是为了庆祝节日 非常愉快的圣诞节”。苏珊·奥尔森 (辛迪)会从中消失 重逢,珍妮弗·鲁尼恩带走了她 地点。这是一部两小时的电影 布雷迪一家聚在一起 庆祝圣诞节,介绍 世界之家的配偶和子女 布雷迪的孩子们。这部电影是第一部 1988年收视率最高的电视电影 如果示例文本是变量$string,我需要它返回:PHP正则表达式匹配包含一年的句子,php,regex,Php,Regex,我需要一个正则表达式,可以从包含一年的文本中提取句子 示例文本: 接着,1988年布雷迪一家又回来了 又一次是为了庆祝节日 非常愉快的圣诞节”。苏珊·奥尔森 (辛迪)会从中消失 重逢,珍妮弗·鲁尼恩带走了她 地点。这是一部两小时的电影 布雷迪一家聚在一起 庆祝圣诞节,介绍 世界之家的配偶和子女 布雷迪的孩子们。这部电影是第一部 1988年收视率最高的电视电影 如果示例文本是变量$string,我需要它返回: $sentenceWithYear[0]=下一个,1988年 布雷迪一家又回来了 “节
- $sentenceWithYear[0]=下一个,1988年 布雷迪一家又回来了 “节日庆典”是一个非常乏味的节日 圣诞节”李>
- $sentenceWithYear[1]=这部电影 是世界上收视率最高的电视电影 1988年
$string = ".".str_replace(".", "..", rtrim($string, '.')).".";
preg_match_all("~\.[^.]*?((19|20)\d{2})[^.]*?\.~", $string, $sentenceWithYear);
注意,您需要添加额外的点作为正则表达式的断点。每个句子前后都必须有自己的点,因此:
'Sentence 1. Sentence 2.'
变成这样:
'.Sentence 1.. Sentence 2.'
该正则表达式将生成如下匹配:
Array (
0 => Array (
0 => '.Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas".',
1 => '. This movie was the highest rated TV-movie of 1988.'
),
1 => Array (
0 => 1988,
1 => 1988
)
)
然后,您可以轻松地遍历结果并将其插入数据库。请注意,这些句子仍然存在前面的点,您需要使用ltrim
来消除它
foreach($sentenceWithYear[0] as $key => $sentence) {
$q = "INSERT INTO
table_name (year, sentence)
VALUES ('".$sentenceWithYear[1][$key]."', '".ltrim($sentence, ". ")."')";
mysql_query($q);
}
这将生成如下查询:
INSERT INTO table_name (year, sentence) VALUES ('1988', 'Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas".')
INSERT INTO table_name (year, sentence) VALUES ('1988', 'This movie was the highest rated TV-movie of 1988.')
不过,一定要避开你的疑问。(这不是答案,而是建议)
我觉得你想把事情弄得太复杂了。你确实有两个问题:
一旦你能够充分识别句子,第2点就很简单了。+1是一个非常有趣和发人深省的问题