Как я повторяю символ n времена в строке?

#define _kisiOS7 ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7.0)

if (_kisiOS7) {
            NSLog(@"iOS7 or greater")
} 
else {
           NSLog(@"Less than iOS7");
}
22
задан brian d foy 23 March 2009 в 02:29
поделиться

3 ответа

По умолчанию замены берут строку в качестве части для замены. Для выполнения кода в процессе замены, необходимо использовать эти e флаг.

$numOfChar = 10;

s/^(.*)/' ' x $numOfChar . $1/e;

Это добавит $numOfChar пространство к запуску Вашего текста. Сделать это для каждой строки в тексте любое использование -p флаг (для быстрой, короткой обработки):

cat foo.txt | perl -p -e "$n = 10; s/^(.*)/' ' x $n . $1/e/" > bar.txt

или если это - часть большего использования сценария -g и -m флаги (-g для глобальной, т.е. повторенной замены и -m для создания ^ соответствие в начале каждой строки):

$n = 10;
$text =~ s/^(.*)/' ' x $n . $1/mge;
25
ответ дан kixx 29 November 2019 в 04:20
поделиться

Вы правы. Perl x оператор повторяет строку неоднократно.

print "test\n" x 10; # prints 10 lines of "test"

РЕДАКТИРОВАНИЕ: Чтобы сделать эту внутреннюю часть регулярное выражение, вероятно, было бы лучше (иначе самая обслуживающая товарищеская встреча) просто присвоить значение другой переменной.

my $spaces = " " x 10;
s/^\s*(.*)/$spaces$1/;

существуют способы сделать это без дополнительной переменной, но просто мои 0,02$ будет легче поддержать, если Вы сделаете это этот путь.

РЕДАКТИРОВАНИЕ: Я зафиксировал свой regex. Извините я не читал, это исправляется в первый раз.

8
ответ дан Chris Lutz 29 November 2019 в 04:20
поделиться

Ваше регулярное выражение может быть записано как:

$numOfChar = 10;

s/^(.*)/(' ' x $numOfChar).$1/e;

но - можно сделать это с:

s/^/' ' x $numOfChar/e;

Или не используя regexps вообще:

$_ = ( ' ' x $numOfChar ) . $_;
15
ответ дан 29 November 2019 в 04:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: