[]

PHP'li, regex'li ve çözüm bulamadığım bir soru

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  (23.02.13 20:41:13) 
soru işareti, nokta, virgül, noktalı virgül. tüm noktalama işaretleri olabilir yani.


  • kamera motor  (23.02.13 21:01:39) 
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  (23.02.13 21:21:55) 
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  (23.02.13 21:40:53) 
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  (23.02.13 22:12:52) 
(\s)([^.]*)(\s\-)
s11.postimage.org

  • ssyumusakg  (23.02.13 22:56:28) 
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  (24.02.13 17:19:41 ~ 17:20:11) 
oldukça mantıklı bir çözüm olmuş gerçekten


  • ssyumusakg  (25.02.13 02:33:04) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.