I'm trying to strip metadata from some news articles I got from Lexis Nexis. I'm currently having some trouble with stripping multiline meta data, that is: my pattern only matches the first line.
I suspect this could be fixed with a negative lookahead that looks for multiple line breaks, but so far I've not been able to work it out.
$article = "SECTION: Media; Blz. 33
LENGTH: 355 woorden
HIGHLIGHT: Verkiezingen Robert Jensen keert vanaf vandaag terug op de
Nederlandse televisie. In 'Jensen kiest voor Amerika' onderzoekt hij de
aantrekkingskracht van Donald Trump. Is hij definitief terug of lonkt misschien
een oude liefde?
Waarom ben je Jensen kiest voor Amerika gaan maken?
,,Ik vind Amerika al mijn hele leven een fascinerend land, ben er vaak en volg
de verkiezingen als fenomeen. Toen Trump maar bleef winnen, begon het idee voor
een tv-programma te leven. Ik wilde alles van die Trump-aanhangers weten want
daar hoor je weinig over.''";
preg_match_all( "/[A-Z\h-]+: *[^]+/", $article, $matches);
var_dump( $matches[0] );
die();
Results in:
array(3) { [0]=> string(23) "SECTION: Media; Blz. 33" [1]=> string(19) "LENGTH: 355 woorden" [2]=> string(70) "HIGHLIGHT: Verkiezingen Robert Jensen keert vanaf vandaag terug op de" }
As you can only the first line of the highlight data is matched.
I've also put a full article (with multiple examples of multiline metadata) up on regex101.
Edit:
After two answers I realise that my question may not have been totally clear -- sorry about that.
I'm trying to strip/remove the meta data from $article
so that only the body of the article is left. In my example I'm using preg_match_all()
. Once I can correctly match the meta tags, I'll use preg_replace()
to replace it with an empty string. I considered using preg_split(), but than I'd have to guess which of the array items is the actual body -- a meta tag could be longer then the actual body, although that's not a likely scenario.
So what is meta tag? A meta tag always starts with [A-Z\h-]+:
and ends with a blank line, i.e. two line breaks.
If you take the aforementioned example and put the tags in an array and the article body in a separate variable it'd look like this:
<?php
$meta_tags = [
"SECTION" => "Media; Blz. 33",
"LENGTH" => "355 woorden",
"HIGHLIGHT" => "Verkiezingen Robert Jensen keert vanaf vandaag terug op de
Nederlandse televisie. In 'Jensen kiest voor Amerika' onderzoekt hij de
aantrekkingskracht van Donald Trump. Is hij definitief terug of lonkt misschien
een oude liefde?"
];
$article_body = "Waarom ben je Jensen kiest voor Amerika gaan maken?
,,Ik vind Amerika al mijn hele leven een fascinerend land, ben er vaak en volg
de verkiezingen als fenomeen. Toen Trump maar bleef winnen, begon het idee voor
een tv-programma te leven. Ik wilde alles van die Trump-aanhangers weten want
daar hoor je weinig over.''";
Additional note: There may also be some more meta tags after the body's article, but the preg_replace()
on meta tags should also take care of that.