парсинг с использованием php - PullRequest
1 голос
/ 29 июня 2011

с учетом строки:

Природа кровотока [[Pulsatile_flow | pulsatile]] создает пульсовую волну, которая распространяется вниз по [[артериальному дереву]] и в [[Aortic_bifurcation |бифуркации]] отраженные волны отскакивают, возвращаясь к полулунным клапанам и происхождению [[аорты]].Эти возвратные волны создают [[Dicrotic_notch # Ventricular_systole | dicrotic notch]], отображаемый на кривой давления в аорте во время [[сердечного цикла]], когда эти отраженные волны воздействуют на [[клапан сердца | полулунный клапан аорты]]. [[Wiktionary: aorta |]]

как я могу извлечь ВСЕ слова / фразы, заключенные в '[[]]' и поместить их в массив, используя php.

с условием: if "|»существовать получить только слова после "|"если после "|" нет словполучить слова перед "|"но после ":".
слова в скобках также не будут учитываться.

пример

[[aorta]]                              => retrieve aortal

[[Pulsatile_flow|pulsatile]]           => retrieve only pulsatile

[[Pulsatile_flow|pulsatile (temp)]]    => retrieve only pulsatile

[[Wiktionary:aorta|Aorta Topic]]       => retrieve Aorta Topic

[[Wiktionary:aorta|]]                  => retrieve aorta

[[aorta|]]                             => retrieve aorta

если "|"не существует восстановить все

 [[Wiktionary:aorta]]  => retrieve Wiktionary:aorta

1 Ответ

0 голосов
/ 29 июня 2011

Проверьте это:

$results = array();
$source = "The [[Pulsatile_flow|pulsatile]] nature of blood flow creates a pulse wave that is propagated down the [[arterial tree]], and at [[Aortic_bifurcation|bifurcations]] reflected waves rebound to return to semilunar valves and the origin of the [[aorta]]. These return waves create the [[Dicrotic_notch#Ventricular_systole|dicrotic notch]] displayed in the aortic pressure curve during the [[cardiac cycle]] as these reflected waves push on the [[heart valve|aortic semilunar valve]].[[Wiktionary:aorta|]]";
if ( preg_match_all('/\[\[(.*?)\]\]/is', $source, $matches) ) 
{
    foreach ( $matches[1] as $match ) 
    {
        if ( strpos( $match, '|' ) === false ) {
            $results[] = $match;
        } else {
            $parts = explode( '|', $match );
            if ( empty( $parts[1] ) ) {
                $parts = explode( ':', $parts[0] );
                $results[] = count( $parts ) == 2 ? $parts[1] : $parts[0];
            } else {
                $results[] = preg_replace( '/\(.*?\)/is', '', $parts[1] );
            }
        }
    }
}

var_dump( $results );
...