Mam problem z uruchomieniem zamiany ciągów znaków Ruby. Piszę preprocesor na ograniczony język, którego używam, który natywnie nie obsługuje tablic, więc włamuję się sam.Zastąp wszystkie dopasowania wartościami w regularnym wyrażeniu Ruby
Mam wiersz:
x[0] = x[1] & x[1] = x[2]
chcę zastąpić każde wystąpienie z wersją przeformatowanym:
x__0 = x__1 & x__1 = x__2
Linia może zawierać nawiasów kwadratowych gdzie indziej.
Mam regex, który będzie pasował do wykorzystania tablicy:
array_usage = /(\w+)\[(\d+)\]/
ale nie mogę dowiedzieć się Ruby skonstruować zastąpić każde wystąpienie jednego po drugim. Nie mogę użyć .gsub()
, ponieważ będzie to pasować do każdego wystąpienia na linii i zastąpić każdą deklarację tablicy tym, czym była pierwsza. .scan()
narzeka, że ciąg znaków jest modyfikowany, jeśli spróbujesz użyć skanowania z numerem .sub()!
w bloku.
Wszelkie pomysły będą mile widziane!
Och, magia, dziękuję. Nie działało to dla mnie, ponieważ opakowałem "\ 1 __ \ 2" w podwójne cudzysłowy "", a nie pojedyncze "". Pójdę i przeczytam, dlaczego Ruby traktuje każdą z nich inaczej. Dzięki Mark! – cflewis
@Lewisham: Gdy używasz podwójnych cudzysłowów "\ 1" jest interpretowane jako kod ucieczki dla znaku ASCII 1. Kiedy używasz pojedynczych cudzysłowów, ciąg znaków jest interpretowany dosłownie jako ukośnik odwrotny, a następnie 1, który gsub rozpoznaje. –
Możesz nadal używać podwójnych cudzysłowów, jeśli wyjdziesz z \ 1. na przykład "\\ 1 __ \\ 2" – seo