Regex
使用 sed 緩衝區將文本封裝在引號中
我需要進行搜尋和替換以將變數字元串封裝在單引號中(php 對象表示法到 php 數組表示法中),以便以下塊:
$my_trip->trip_id = ( $my_trips_opts->trip_id > 0 ) ? $my_trips_opts->trip_id : 1; $my_trip->trip_name = $my_trips_opts->trip_name; $my_trip->trip_location_paris = ( $my_trips_opts->trip_location_paris == 'paris' || $my_trips_opts->trip_location_paris == true ) ? true : false;
轉換為:
$my_trip->trip_id = ( $my_trips_opts['trip_id'] > 0 ) ? $my_trips_opts['trip_id'] : 1; $my_trip->trip_name = $my_trips_opts['trip_name']; $my_trip->trip_location_paris = ( $my_trips_opts['trip_location_paris'] == 'paris' || $my_trips_opts['trip_location_paris'] == true ) ? true : false;
挑戰在於“$my_trip_opts->”後面的字元串是可變的,並且可能需要儲存在緩衝區中。
不是緩衝區:您需要的是標記的正則表達式。
sed "s/\(\$my_trips_opts\)->\([a-zA-Z_]*\>\)/\1['\2']/g"
基本上,在 s/patterns/replacement/ 中,如果將模式括在轉義括號中,則可以在替換中通過 \1、\2 等來引用它們。