/ / Jak mogę wstawić znak do łańcucha za pomocą operatora s ///? - regex, perl, string

Jak wstawić znak do łańcucha za pomocą operatora s ///? - regex, perl, string

Próbuję wstawić znak komentarza do ciągu coś podobnego do tego:

-CreateVideoTracker VT1 "vt name"

staje się

-CreateVideoTracker VT1 # "vt name"

Słowo VT1 może być w rzeczywistości czymkolwiek, więc używam wyrażenia regularnego

$line =~ s/-CreateVideoTracker w/-CreateVideoTracker w # /g;

co daje mi wynik:

-CreateVideoTracker w #T1 "vt name"

Czy można to zrobić za pomocą jednego wyrażenia regularnego, czy też muszę podzielić ciąg i wstawić komentarz ręcznie?

Odpowiedzi:

9 dla odpowiedzi № 1
$line =~ s/^(-CreateVideoTracker)s+(w+)/$1 $2 #/;

Wyrażenia w nawiasach kwadratowych (znane jako „bufory przechwytywania”) w pierwszej połowie wyrażenia regularnego są określane jako $1, $2. itp. w drugiej połowie.


2 dla odpowiedzi nr 2

Możesz użyć K funkcja wyrażeń regularnych Perla 5.10;

$line=~s/^-CreateVideoTrackers+w+K/ #/;

0 dla odpowiedzi № 3

Masz dwa problemy w:

$line =~ s/-CreateVideoTracker w/-CreateVideoTracker w # /g;

Po pierwsze, chcesz dopasować wiele znakówsłowa, więc po lewej stronie w powinno być w +. Po drugie, nie możesz używać wzorów takich jak w po prawej stronie; zamiast tego przechwyć to, co chcesz po lewej stronie za pomocą () i umieść to po prawej za pomocą 1 USD, 2 USD itp .:

$line =~ s/-CreateVideoTracker (w+)/-CreateVideoTracker $1 # /g;

-1 dla odpowiedzi № 4
(?<=-CreateVideoTrackers[^s]*)(?<replacemelolkthx>s)

zamienić " # "