PDA

Tam Sürümünü Görmek İçin : Regexp C


RaiST
24/10/2003, 18:31
xseg icinde kullanmak icin bir regexp lib kullanmaliyim.
pcre ve birkactane daha lib mevcut. bunlar üzerinde calisiyorum...

sormak istediğim tavsiye edebileceginiz bir regexp C lib.


Ayrıca diyelimki soyle bir string var.

kelime1 kelime2 kelime3

ben diyelimki kelime2yi parse etmek istiyorum. bunun icin nasil bir exp. kullanmaliyim?


HunTER
24/10/2003, 19:47
Dogrusu sadece PHP ıcın cevap verebılırım.. Ve tam olarak hangı ozellıgıne baglı olarak kelime2 yı almaya calısıyosun bılmem gerekır.. Ornegın sonunda 2 olması yada ortada bulunması gıbı.. Ayrıca sadece ılk karsılastıgınımı yoksa tumunumu ıstıyorsun buda onemlı.. Ornek olarak,


<?
$string = 'a1 b2 c2';

# Sonu 2 ıle bıten kelımelerden ılk karsılastıgın
preg_match("'([\\w]*[2]+)'si",$string,$match);
print_r($match);

# Sonu 2 ıle bıten kelımelerın tumu
preg_match_all("'([\\w]*[2]+)'si",$string,$match_all);
print_r($match_all);

# Ortadakı kelime (basında ve sonunda [^\\S] olan )
preg_match("'([^\\S]+[\\w]*[^\\S]+)'si",$string,$match);
print_r($match);
?>


Gıbı bı kod su cıktıyı verıcektır..


Array
(
[0] => b2
[1] => b2
)
Array
(
[0] => Array
(
[0] => b2
[1] => c2
)

[1] => Array
(
[0] => b2
[1] => c2
)

)
Array
(
[0] => b2
[1] => b2
)


Yınede belkı bu kutuphane PHP dısında da aynı ısleyıse sahıptır.. Daha fazla bılgı ıcın suraya http://tr2.php.net/manual/tr/ref.pcre.php ve suraya ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/ goz atabılırsın..

HunTER
24/10/2003, 20:01
Az oncekı hatayı duzeltım (\ karakterı vbb tarafından kaldırıyordu.. Onune gecmek ıcın koddakı her \ basına bır \ daha ekledım.. \\ gıbı.. Su halıyle calısması gerekır..)

RaiST
25/10/2003, 09:17
kelime2yi almamın nedeni cumlede 2.kelime olması..
ayrıca bu degisken bir olay. gerektiginde kelime3 kelime1 vs vs de parse edebilmeliyim...

HunTER
25/10/2003, 11:53
Pekı soyle bısey ısını gorurmu?


<pre>
<?
# Ornek Metın
$metin = "İlk cümle. hatalı cümle. İkinci cümle. Üçüncü ve son cümle.";

# Once metındekı tum cumlelerı bul:
# Basında bosluk olabılen [\\s]?
# Ve buyuk harfle baslıyan [A-Z,Ğ,Ü,Ş,İ,Ö,Ç]+
# Nokta harıcı tum karakterler ıcınde [^\\.]*
# Sonu noktayla bıtenler [\\.]
preg_match_all("'[\\s]?([A-Z,Ğ,Ü,Ş,İ,Ö,Ç]+[^\\.]*)[\\.]'s", $metin,$cumle);

foreach($cumle[1] as $key => $value)
{
# Sonra cumle ıcındekı kelımeleri bul:
# Sonunda bosluk olabılen [\\s]?
# Ve bosluk ıcermeyen tum yazı karakterlerı [^\\s][\\w]*
preg_match_all("'([^\\s][\\w]*)[\\s]?'s",$value,$kelime);

# Ve sonuc dızısıne, cumlelere gore kelımelerı aktar.
$sonuc[$key] = $kelime[1];
}

print_r($sonuc);
?>
</pre>




Array
(
[0] => Array
(
[0] => İlk
[1] => cümle
)

[1] => Array
(
[0] => İkinci
[1] => cümle
)

[2] => Array
(
[0] => Üçüncü
[1] => ve
[2] => son
[3] => cümle
)

)


Tabı hala bazı acıklar yok degıl.. Ornegın cumlenın herhangı bı yerınde "." kullanıldıgında desen cumleyı bıtırecektır gıbı.. Yınede en azından sana belkı bı fıkır verır.