[]
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.
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ı?
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.
(.*?) [.|,|?] (.*?) -
$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.
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..
$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)
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.
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