Bir yıl içeren cümleler maç için PHP regex

2 Cevap php

Ben onlara bir yıl içeren metin cümleler ayıklamak bir düzenli ifade gerekiyor.

Örnek metin:

Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas". Susan Olsen (Cindy) would be missing from this reunion, Jennifer Runyon took her place. This was a two hour movie in which the Bradys got together to celebrate Christmas, introducing the world to the spouses and children of the Brady kids. This movie was the highest rated TV-movie of 1988.

Örneğin metin değişkeni $ string olsaydı, ben dönmek gerekiyor:

  • $sentenceWithYear[0] = Next, in 1988 the Bradys were back again for a holiday celebration, "A Very Brady Christmas".
  • $sentenceWithYear[1] = This movie was the highest rated TV-movie of 1988.

Bu regex aracılığıyla yıl tutmak mümkün ise, ben cümle içinde yıl kullanmak ve sonunda böyle bir veritabanına cümle eklemek istiyorum:

Tablo_ismi (yıl, cümle) VALUES ('$ yıl', '$ sentenceWithYear [x]') INSERT INTO

2 Cevap

(Bu bir cevap değil, ama bir öneri)

Bunu çok karmaşık bir hale getirmeye çalışıyoruz düşünüyorum. Gerçekten iki sorun var:

  1. Cümleler bir paragraf kırın
  2. Cümleler muhtemelen 1900-2100 ya da öylesine aralığında bir 4 haneli sayıyı ihtiva eden tespit.

Point # 1 nedeni belirsiz kullanımı oldukça zordur. karakter. Örneğin, nasıl cümleler süreç olacaktır:

Ben 1986 yılında doğdum. Bay Smith 1976 yılında doğdu.

Siz "Sayın" sonrası dönem bir cümle sonlandırıcı karakter değildir, ve iki cümle aslında var olduğunu kabul etmek gerekiyor. Eğer (Tatu adlı @ dahil) olsun en cevapları dönemine dayanan naif bir bölünme yapacağız.

edit Başka bir kullanım durumunda: para

Benim 2010 vergi beyannamesi üzerinde bildirmek zorunda değilsiniz dün 42,00 $ kazandı.

Eğer yeterli cümleler tespit etmek mümkün olduğunuzda, noktası # 2 oldukça saçmadır.

Bu deneyin:

$string = ".".str_replace(".", "..", rtrim($string, '.')).".";
preg_match_all("~\.[^.]*?((19|20)\d{2})[^.]*?\.~", $string, $sentenceWithYear);

Eğer regex için mola noktaları davranmak gibi ek bir nokta eklemeniz gerektiğini unutmayın. Her cümle, kendisinden önce ve sonra kendi noktalar olması gerekir ki bu:

'Sentence 1. Sentence 2.'

Bu Oldu:

'.Sentence 1.. Sentence 2.'

Bu regex Bu gibi maçlar oluşturmak olacaktır:

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
    )
)

Sen sonuçlar üzerinden sonra kolayca döngü ve veritabanı içine yerleştirin. Cümleler hala önceki nokta hediyem var unutmayın, siz ltrim Bundan kurtulmak için kullanmak gerekir.

foreach($sentenceWithYear[0] as $key => $sentence) {
    $q = "INSERT INTO
              table_name (year, sentence)
          VALUES ('".$sentenceWithYear[1][$key]."', '".ltrim($sentence, ". ")."')";
    mysql_query($q);
}

Bu gibi sorguları oluşturmak olacaktır:

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.')

Olsa da, sorguları kaçmak için emin olun.