Вы можете получить хотя бы немного проще, если сохраните id
в массиве и переберите этот массив:
ids = ["1", "2", "3"];
HTML:
Ваш [ 119] StackBlitz
Но это может быть правильным местом для директивы, так что посмотрите на это: Официальные документы
Including tests:
use strict;
use warnings;
use Test::More qw(no_plan);
sub strip_comments {
my $string=shift;
$string =~ s#/\*.*?\*/##sg; #strip multiline C comments
return $string;
}
is(strip_comments('a/* comment1 */ code /* comment2 */b'),'a code b');
is(strip_comments('a/* comment1 /* comment2 */b'),'ab');
is(strip_comments("a/* comment1\n\ncomment */ code /* comment2 */b"),'a code b');
Как часто бывает в Perl, вы можете обратиться к CPAN: Regexp :: Common :: Comment должен вам помочь. Я обнаружил, что один язык, в котором используются описанные вами комментарии, - это Nickle, но, возможно, комментарии PHP подойдут (// также можно начинать однострочный комментарий).
Обратите внимание, что в любом случае использование регулярных выражений для удаления комментария является опасно, полный синтаксический анализатор языка гораздо менее рискован. Например, парсер регулярных выражений может запутаться, увидев что-то вроде print "/*";[1151865 impression.
Это FAQ:
perldoc -q comment
Найдено в ] perlfaq6 :
Как использовать регулярное выражение для удаления комментариев в стиле C из файла?
Хотя это действительно можно сделать, это намного сложнее, чем вы думаете. Для Например, этот однострочный ...
Удалить / * * / комментарии (в том числе многострочные)
s/\/\*.*?\*\///gs
Я публикую это, потому что это просто, однако я считаю, что это может споткнуться о встроенных комментариях, таких как
/* sdafsdfsdf /*sda asd*/ asdsdf */
Но поскольку они довольно редки, я предпочитаю простое регулярное выражение.
Из perlfaq6 «Как использовать регулярное выражение для удаления комментариев в стиле C из файла?»:
Хотя это действительно можно сделать, это намного сложнее, чем вы думаете. Например, этот однострочный
perl -0777 -pe 's{/\*.*?\*/}{}gs' foo.c
будет работать во многих, но не во всех случаях. Видите ли, это слишком простовато для определенных типов программ на C, в частности, для тех, которые кажутся комментариями в строках в кавычках. Для этого вам понадобится что-то вроде этого, созданное Джеффри Фридлом и позднее измененное Фредом Кертисом.
$/ = undef;
$_ = <>;
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $2 ? $2 : ""#gse;
print;
Это, конечно, можно было бы написать более разборчиво с помощью модификатора / x, добавив пробелы и комментарии. Здесь он расширен, любезно предоставлен Фредом Кертисом.
s{
/\* ## Start of /* ... */ comment
[^*]*\*+ ## Non-* followed by 1-or-more *'s
(
[^/*][^*]*\*+
)* ## 0-or-more things which don't start with /
## but do end with '*'
/ ## End of /* ... */ comment
| ## OR various things which aren't comments:
(
" ## Start of " ... " string
(
\\. ## Escaped char
| ## OR
[^"\\] ## Non "\
)*
" ## End of " ... " string
| ## OR
' ## Start of ' ... ' string
(
\\. ## Escaped char
| ## OR
[^'\\] ## Non '\
)*
' ## End of ' ... ' string
| ## OR
. ## Anything other char
[^/"'\\]* ## Chars which doesn't start a comment, string or escape
)
}{defined $2 ? $2 : ""}gxse;
Небольшая модификация также удаляет комментарии C ++, возможно, охватывающие несколько строк с использованием символа продолжения:
s#/\*[^*]*\*+([^/*][^*]*\*+)*/|//([^\\]|[^\n][\n]?)*?\n|("(\\.|[^"\\])*"|'(\\.|[^'\\])*'|.[^/"'\\]*)#defined $3 ? $3 : ""#gse;
Существует также не-Perl ответ: используйте программу stripcmt :
StripCmt - это простая утилита, написанная в C, чтобы удалить комментарии из C, C ++, и исходные файлы Java. В большом традиция обработки текста Unix программ, он может функционировать как Фильтр FIFO (First In - First Out) или принимать аргументы в командной строке.