Regex ile bul/degiştir (search/replace) yapmak

taydin

Timur Aydın
Staff member
Katılım
24 Şubat 2018
Mesajlar
26,807
Kıytırık editörleri iyi editörlerden ayıran önemli özelliklerden birisi regex kullanarak search/replace yapabilmek. Mesela aşağıdaki dosyayı düşünelim:

Kod:
    BLOCK_HARDWARE_INFO,
    BLOCK_SPEAKER_IMPEDANCE,
    BLOCK_INPUT,
    BLOCK_VOLUME,
    BLOCK_GAIN_XLR,
    BLOCK_GAIN_RCA,
    BLOCK_MONO_STEREO,
    BLOCK_TRIGGER_MODE,
    BLOCK_FILTER,
    BLOCK_CARTRIDGE,
    BLOCK_BASS,
    BLOCK_TREBLE,
    BLOCK_HEADPHONE_PREAMP,
    BLOCK_BYPASS,
    BLOCK_ACTIVITY_TIMER,
    BLOCK_NETWORK_SETTINGS,
    BLOCK_BACKGROUND_COLOR,
    BLOCK_DISPLAY_BRIGHTNESS,
    BLOCK_POWER_CALC_METHOD,

Burada her bir satırı öyle bir değiştireceğiz ki, satırdaki ifadeyi bir macro içerisine alacağız. Yani ilk iki satır şöyle olacak:

Kod:
CONFIG_BLOCKDEF(BLOCK_HARDWARE_INFO)
CONFIG_BLOCKDEF(BLOCK_SPEAKER_IMPEDANCE)

Bunu emacs editörünün "Query replace regexp" komutu ile tek hamlede yapabiliyoruz. Tek tek değiştirme ile yapılabilecek olası hataların da önüne geçilmiş oluyor.

1692196527050.png
 
Burada aratılacak regex ve onun yerine yazılacak ifade aşağıda

1692196739698.png


Regex'in tercümesi şu: 0 veya daha fazla boşluk karakteri bul. Sonra BLOCK_ yazısını bul. Sonra, virgüle kadar olan ifadeyi "1" numaralı değişkene at.

Yerine yazılacak ifadenin tercümesi de şu: CONFIG_BLOCKDEF( ile başla. Sonra da "1" numaralı değişkendeki değeri yaz. Sonra da ) koy.
 
Bu kullandığım nispeten basit bir regex. Çok daha karmaşık yapılar kurmak mümkün. Değişik alternatifleri test etmek için aşağıdaki site kullanılabilir.


Her yazılımın regex desteği birbirine denk olmayabiliyor, ama mantık büyük ölçüde aynı. Sadece istisnaları bilmek yeterlidir.
 

Çevrimiçi üyeler

Forum istatistikleri

Konular
8,866
Mesajlar
144,197
Üyeler
3,561
Son üye
ecem oruç

Son kaynaklar

Back
Top