Как вставить символ в строку с помощью оператора s ///? - PullRequest
2 голосов
/ 12 ноября 2008

Я пытаюсь вставить символ комментария в строку, похожую на эту:

-CreateVideoTracker VT1 "vt name"

становится

-CreateVideoTracker VT1 # "vt name"

Слово VT1 может быть любым, поэтому я использую регулярное выражение

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

, который дает мне результат:

-CreateVideoTracker w #T1 "vt name"

Есть ли способ сделать это с помощью одного регулярного выражения или мне нужно разделить строку и вставить комментарий вручную?

Ответы [ 4 ]

9 голосов
/ 12 ноября 2008
$line =~ s/^(\-CreateVideoTracker)\s+(\w+)/$1 $2 #/;

Выражения в скобках (известные как «буферы захвата») в первой половине регулярного выражения обозначаются как $1, $2. и т.д. во второй половине.

2 голосов
/ 13 ноября 2008

Вы можете использовать функцию \K в регулярных выражениях Perl 5.10;

$line=~s/^\-CreateVideoTracker\s+\w+\K/ #/;
0 голосов
/ 13 ноября 2008

У вас есть две проблемы:

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

Во-первых, вы хотите сопоставить несколько слов символов, поэтому в левой части \ w должно быть \ w +. Во-вторых, вы не можете использовать шаблоны, такие как \ w с правой стороны; вместо этого захватите то, что вы хотите слева, с помощью (), а справа - 1, 2 и т. д.

$line =~ s/\-CreateVideoTracker (\w+)/\-CreateVideoTracker $1 # /g;
0 голосов
/ 12 ноября 2008
(?<=-CreateVideoTracker\s[^\s]*)(?<replacemelolkthx>\s)

заменить на "#"

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...