2011-05-11 2 views
2

RegEx 지정된 구분 기호로 구의 가장 긴 "부분"을 결정합니까?RegEx를 사용하여 구분 기호 사이의 가장 큰 청크를 결정하려면 어떻게해야합니까?

뉴스 기사에는 거의 항상 이런 종류의 구조가 있습니다. 여기에는 실제로 제목과 가비지가 있습니다. 제목의 긴 부분을 모든 쓰레기를 정규식 및 유지 관리 할 수있는 방법이 있나요, 분명이 여기

은 몇 가지 예를

eBand 있습니다 ... 등 구분 기호 등 |, -, :를 사용하여 필요 | Jornalismo | Saúde | Alimentos em conserva podem causar botulismo; saiba 코모 evitar doença

오바마 엘 파소에서 넓은 범위의 이민 개혁을 - 산호세 머큐리 뉴스

CL를 호출 + Suspensa produção 드 mortadela 닷컴 toucinho, suspeita 드 contaminação

BBC 뉴스 - 존 케리 긴장된 넥타이로 파키스탄을 여행하다

답변

4

정규식 자체가 아닌 것 같아요. 그러나 "쓰레기"문자에 제목을 나눠서 나머지 부분의 길이로 정렬 할 수 있습니다. 대신 특정 구분 기호의

$parts = preg_split('#\s*[-|:+]+\s*#', $title); 
$parts = array_combine($parts, array_map("strlen", $parts)); 
arsort($parts); 
$longest = current(array_keys($parts)); 

, 당신은 단어가 아닌 기호 (/ U 유니 코드 플래그 또는 [^\pL]) \W에 분할 할 수있다.

+0

사용

$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; } } 

또는 대답. 나는 몇 줄의 조작으로 놀란다. 잘 했어! –

0

나는 그것이 순수한 정규 표현식으로 수행 할 수 있다고 생각하지 않습니다하지만 당신은 결과를 통해 preg_split을 사용하고 반복 할 수 이것은 무서운 멋진 좋은 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'); 
관련 문제