Forum: Ders Arası RSS
Regex ve D RegexMatch'den Veri Alma[Sorun]
Avatar
huseyin #1
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Konu adı: Regex ve D RegexMatch'den Veri Alma[Sorun]
Merhaba Arkadaşlar
D ile bir regex çalışması yaparken şöyle bir sorunla karşılaştım.

string text=cast(string)std.file.read("a.txt");
auto titlereg=regex(`<td[^>]*\sclass="alt1Active"[^>]*>\s*<div>\s*<a[^>]*><strong>(.*?)<\/strong><\/a>`);//title için
 
auto titles=matchAll(text,titlereg);
 
    foreach(title;titles)
    {
        writeln(title);
        writeln();
       
    }

Böyle yazdırınca Çıktı:
["<td class=\"alt1Active\" id=\"f11\" align=\"left\"> <div> <a href=\"ali\"><strong>KONU</strong></a>", "KONU"]

["<td class=\"alt1Active\" id=\"f12\" align=\"left\"> <div> <a href=\"veli\"><strong>SORU</strong></a>", "SORU"]

["<td class=\"alt1Active\" id=\"f13\" align=\"left\"> <div> <a href=\"huseyin\"><strong>YORUM</strong></a>", "YORUM"]
Benim istediğim 2. olan. İlk dizi olduğunu düşünerek opIndex ile çekmeyi denedim yani title[1] gibi ancak değilmiş.
RegexMatch adında bir yapı.
struct RegexMatch(R, alias Engine = ThompsonMatcher) if (isSomeString!R);

Teşekkürler
Huseyin
acehreli (Moderatör) #2
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
huseyin:
Benim istediğim 2. olan.

Senin istediğin her zaman için ikinci olan mı yoksa örneğin sonunda SORU geçiyor diye ikinci olan mı?

Eğer her zaman için ikinci olansa kendin sayarak bir tane atlayabilirsin. En kolayı, titles.popFront() olur herhalde.

İlk dizi olduğunu düşünerek opIndex ile çekmeyi denedim yani title[1] gibi ancak değilmiş.

(title değil de titles demek istedin tabii.)

titles herhalde bir aralık (range) olsa gerek (std.regex'in belgesinde yazar); ama RandomAccessRange değildir herhalde. O yüzden indeksleyemezsin.

Ali
Avatar
huseyin #3
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Senin istediğin her zaman için ikinci olan mı yoksa örneğin sonunda SORU geçiyor diye ikinci olan mı?
İkinci olandan kastettiğim
["<td class=\"alt1Active\" id=\"f11\" align=\"left\"> <div> <a href=\"ali\"><strong>KONU</strong></a>", "KONU"]
dizinin ikinci elemanı yani her birinde ikinci elemanı istiyorum kısacası match olanı :)
Huseyin
acehreli (Moderatör) #4
Kullanıcı başlığı: Ali Çehreli
Üye Haz 2009 tarihinden beri · 4527 mesaj
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
Hm. title[1] bende çalışıyor:
import std.stdio;
import std.regex;
 
void main()
{
    string text = "<td class=\"alt1Active\" id=\"f11\" align=\"left\"> <div> <a href=\"ali\"><strong>KONU</strong></a>";
 
    auto titlereg=regex(`<td[^>]*\sclass="alt1Active"[^>]*>\s*<div>\s*<a[^>]*><strong>(.*?)<\/strong><\/a>`);//title için
 
    auto titles=matchAll(text,titlereg);
 
    foreach(title;titles)
    {
        writeln(title[1]);
    }
}
Çıktısı:

KONU


Ali
Avatar
huseyin #5
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Ya nasıl iş anlamıyorum dün gece çalışmadı şimdi çalıştı neyse çok teşekkür ederim hocam sorun çözülmüştür :)
Huseyin
Mengu (Moderatör) #6
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
selamlar huseyin

regex ile html parse etmemek lazim. vakit gectikce insan bunu daha iyi anliyor. html bir tree oldugu icin html parser kullanmak cok daha mantikli. fakat is ufak, pek de karsi ciktigim bir sey degil boyle basit taskler icin.

d ile html parse etmek icin adam d. ruppe'nin dom kutuphanesini [0] tavsiye etmisler. stackoverflow'da da minik kullanim ornegi var. [1]

[0] https://github.com/adamdruppe/arsd/blob/master/dom.d
[1] http://stackoverflow.com/questions/11936434/is-there-a-htm…
http://www.mengu.net - some kind of monster
Avatar
huseyin #7
Üye Haz 2012 tarihinden beri · 363 mesaj · Konum: Ankara
Grup üyelikleri: Üyeler
Profili göster · Bu konuya bağlantı
Mengu on 2014-06-20, 00:04:
selamlar huseyin

regex ile html parse etmemek lazim. vakit gectikce insan bunu daha iyi anliyor. html bir tree oldugu icin html parser kullanmak cok daha mantikli. fakat is ufak, pek de karsi ciktigim bir sey degil boyle basit taskler icin.

Selamlar
Regex'i html ayırmak için kullanmam php ile başlamıştı :) Aslında çok problem olmuyor regex üzerinden devam edebilirim. Evet DOM parser aradım ancak bulamamıştım. Kütüphane için çok teşekkür ederim.

İlk xml ile denedim ki html in yapısı bozuk olduğunda program hata döndürüyor falan bir sürü hikaye
Huseyin
Mengu (Moderatör) #8
Kullanıcı başlığı: NONSERVIAM
Üye Tem 2009 tarihinden beri · 347 mesaj · Konum: Dersaadet
Grup üyelikleri: Genel Moderatörler, Üyeler
Profili göster · Bu konuya bağlantı
huseyin on 2014-06-21, 05:25:
Mengu on 2014-06-20, 00:04:
selamlar huseyin

regex ile html parse etmemek lazim. vakit gectikce insan bunu daha iyi anliyor. html bir tree oldugu icin html parser kullanmak cok daha mantikli. fakat is ufak, pek de karsi ciktigim bir sey degil boyle basit taskler icin.

Selamlar
Regex'i html ayırmak için kullanmam php ile başlamıştı :) Aslında çok problem olmuyor regex üzerinden devam edebilirim. Evet DOM parser aradım ancak bulamamıştım. Kütüphane için çok teşekkür ederim.

İlk xml ile denedim ki html in yapısı bozuk olduğunda program hata döndürüyor falan bir sürü hikaye

evet xml parserlar eger html desteklemiyorlarsa direkt patlar kimi html dokumanlari icin. well-formed html dokumanlar icin patlamama ihtimalleri olsa da dom parser kullanmak daha dogru.
http://www.mengu.net - some kind of monster
Doğrulama Kodu: VeriCode Lütfen resimde gördüğünüz doğrulama kodunu girin:
İfadeler: :-) ;-) :-D :-p :blush: :cool: :rolleyes: :huh: :-/ <_< :-( :'( :#: :scared: 8-( :nuts: :-O
Özel Karakterler:
Forum: Ders Arası RSS
Bağlı değilsiniz. · Şifremi unuttum · ÜYELİK
This board is powered by the Unclassified NewsBoard software, 20100516-dev, © 2003-10 by Yves Goergen
Şu an: 2017-11-23, 23:15:15 (UTC -08:00)