RegEx 使用指定的分隔符确定短语的最长"部分"?
新闻报道几乎总是有这种结构,其中实际上是标题加上一堆垃圾。有没有办法清除所有垃圾并保持标题的最长部分,显然这需要使用分隔符,例如|
、-
、:
等......
以下是一些示例
eBand |
Jornalismo |
Saúde |
Alimentos em conserva podem causar botulismo; saiba como evitar a doença
奥巴马呼吁在埃尔帕索进行广泛的移民改革 -
圣何塞水星新闻
CL +
Suspensa produção de mortadela com toucinho, suspeita de contaminação
BBC新闻-
约翰克里将在紧张的关系中前往巴基斯坦
我认为
不是正则表达式本身。但是您可以拆分"垃圾"字符上的标题,然后按其余部分的长度排序。
$parts = preg_split('#'s*[-|:+]+'s*#', $title);
$parts = array_combine($parts, array_map("strlen", $parts));
arsort($parts);
$longest = current(array_keys($parts));
除了特定的分隔符,您还可以拆分非单词符号'W
(或[^'pL]
/u Unicode 标志)。
我认为这不能在纯正则表达式中完成,但您可以使用preg_split并迭代结果:
$pieces = preg_split('/[|-:]/', $headline, PREG_SPLIT_NO_EMPTY);
$max_len = 0;
$result = '';
foreach ($pieces as $piece) {
$len = strlen($piece);
if ($len > $max_len) {
$max_len = $len;
$result = $piece;
}
}
或使用array_reduce
function longest($v, $w) {
if (strlen($w) > strlen($v)) {
return $w;
}
return $v;
}
$pieces = preg_split('/[|-:]/', $headline, PREG_SPLIT_NO_EMPTY);
$result = array_reduce($pieces, 'longest');