metin şöyle:

ali kemal, niyaz ile beraber balığa gitmişti. o gün; çipura, çinekop, köpekbalığı ve balina tuttular. rıza - ise bekliyordu.


şimdi, bu metinde almak istediğim ifade "rıza".
düzenli bir ifade olarak tek çıkış yolunu şöyle bulabildim: " - " işareti ile bundan hemen önceki noktalama işareti arasındaki terimleri al.

ama nasıl tanımlarım ki bunu?

nokta, virgül, noktalı virgül, ünlem işareti vs. olabiliyor buradaki noktalama işareti. önemli değil.

önemli olan; " - " işaretinden hemen önceki noktalama işareti olması. 2 önceki değil, 3 önceki de değil. hemen önceki işaret. bu ikisi arasındaki ifadeleri almaya dair bir formül yaratabilirsem belki günlerce sürecek işimi kısaltacağım.

tavsiye bir şeyler?

not: çözemediğim şey şu: eğer " - " ile noktalama işareti arasındakileri al deseydim, rahatça yapardım. ama düzenli ifadeyi tersten okutmak istiyorum. sonu " - " ile bitsin ve bundan önceki ilk noktalama işaretine kadar olan kısmı alsın. demem gerekiyor.

 

tuttular. rıza -

buradaki . ile - işareti arasını alıp, boşlukları silip tanımı alsan olur mu? tireden önceki nokta mı, yoksa soru işareti vs var mı?

gneral

soru işareti, nokta, virgül, noktalı virgül. tüm noktalama işaretleri olabilir yani.

kamera motor

onu da regex ile ayarlayabilirsin, [.|,|?] vs. gibi ?

(.*?) [.|,|?] (.*?) -

$2 de değer olabilir? formülü doğrulamadan yazdım, mantık olarak olması lazım.

gneral

hocam şöyle bir durum var. mesela senin şuan yazdığın regexle, yakaladığı ilk noktalama işaretinden " - " işaretine kadar tümünü alır. yani diyelim ki meyinde 50 tane virgül var ve ardından " - " geliyor. bu 49 virgülü de alır.

ben son virgülden " - " işaretine kadarki kısmı istiyorum.

kamera motor

arkadasin dedigi gibi,

$metin = strrev ali kemal, niyaz ile beraber balığa gitmişti. o gün; çipura, çinekop, köpekbalığı ve balina tuttular. rıza - ise bekliyordu.

output: .udroyilkeb esi - rıza . ral..........

sonra regex i burada uygulayabilsen olur mu? denemeden yazdim yine..

gneral

(\s)([^.]*)(\s\-)
s11.postimage.org

ssyumusakg

hmm, şöyle olabilir gibi anladım (php'de regex syntax'ını bilmiyorum):
yazıdaki ilk -'yi bul. onun index'inden geriye doğru yürü, yürürken geldiğin her karakteri kontrol et, noktalama işareti mi diye (burada regex gerekir, araştırmak lazım: www.google.com.tr )


ilk noktalama işaretini bulduğun an bu işaret'in index'i ile -'nin index'i arasındaki string'i trim'le, eğer sonuç string boşluk (whitespace diyelim hatta) içermiyorsa aradığın kelimedir.

yoksa ikinci -'ye gider aynı işlemleri uygularsın, böyle devam eder.

samfisher

oldukça mantıklı bir çözüm olmuş gerçekten

ssyumusakg
1

mobil görünümden çık