chcę to zrobić:Vim regex wsteczne
%s/shop_(*)/shop_\1 wp_\1/
Dlaczego nie shop_(*)
dopasowania czegokolwiek?
chcę to zrobić:Vim regex wsteczne
%s/shop_(*)/shop_\1 wp_\1/
Dlaczego nie shop_(*)
dopasowania czegokolwiek?
Jeśli dobrze rozumiem, chcesz %s/shop_\(.*\)/shop_\1 wp_\1/
Ucieczka nawias przechwytywania i użyć .*
dopasować dowolną liczbę jakiegokolwiek charakteru.
(Twoje wyszukiwanie jest poszukiwanie „shop_” następnie dowolną liczbę otwarciu nawiasów następnie nawias zamykający)
Istnieje kilka kwestii tutaj.
nawiasy w vim regexen nie są do przechwytywania - trzeba użyć \(\)
do przechwytywania.
nie znaczy co myślisz. Oznacza to "0 lub więcej poprzednich", więc twoje wyrażenie oznacza "ciąg zawierający shop_
, po którym następuje 0+ (
, a następnie literalny )
.
Szukasz .
, który w wyrażeniu regularnym oznacza" dowolny znak ". razem z gwiazdą jak .*
to znaczy „0 lub więcej charakteru” prawdopodobnie chcesz co najmniej jeden znak, więc używaj .\+
(+
oznacza „1 lub więcej od poprzedniego”)
używać.: %s/shop_\(.\+\)/shop_\1 wp_\1/
.
Opcjonalnie zakończ z g
po ostatnim ukośniku zastąpić wszystkie wystąpienia w jednym wierszu, a nie tylko pierwszy.
Jestem trochę bliżej: '% s/shop _/& wp_ \ 1' – nnyby
Jeśli nie rozumiem poprawnie, spróbuj dodać przykłady. – Stephen
To pytanie byłoby bardziej przydatne dla przyszłych użytkowników SO, gdyby dodano przykład tego, co jest próbowane z wyrażeniem regularnym. – LondonRob