LINUX.ORG.RU

perlre, точный аналог «%10d»


0

1

Подскажите регулярное выражение, которое было бы точным аналогом «%10d» в sscanf, если таковое имеется.

Т.е. всего 10 символов, впереди любое количество пробелов, потом любое количество цифр. Аналог такого, но без substr:

substr($a, 0, 10) =~ /\s*([+-]?\d)+$/

★★

Ответ на: комментарий от octy


Сам поэкспериментируй! Совсем народ обленился, понимешь ли..

Fischer
()

ага, дошло таки, что ты хочешь…

/[-+\d]\d{9}|\s[-+\d]\d{8}|\s{2}[-+\d]\d{7}|\s{3}[-+\d]\d{6}|\s{4}[-+\d]\d{5}|\s{5}[-+\d]\d{4}|\s{6}[-+\d]\d{3}|\s{7}[-+\d]\d{2}|\s{8}[-+\d]\d{1}|\s{9}\d/
arsi ★★★★★
()
Ответ на: комментарий от arsi

Тьфу ты, ну да, sscanf ведь именно так работает. Так что это верный ответ на поставленный вопрос :-)

А мне было нужно, чтобы «10» означало 10 позиций, а не десять цифр. Чтобы не

 "     1234567890" ~ /^\s*([+-]?\d{1,10})\s*$/ —>  $1 == 1234567890

а $1 —> 12345. Ну да ладно, вопрос остался чисто академический: можно ли ограничить квантификатором длину целого соответствия, а не последовательности символов.

octy ★★
() автор топика
Ответ на: комментарий от arsi

[смайлик с открытым ртом]

Не, китайский код не годится :-) Я думал как-то более обще можно.

octy ★★
() автор топика
Ответ на: комментарий от octy

> Ну да ладно, вопрос остался чисто академический: можно ли ограничить квантификатором длину целого соответствия, а не последовательности символов.

Примеры приведи.

AnDoR ★★★★★
()
Ответ на: комментарий от AnDoR
$a =~ /^(.{10})/;
$1 =~ /\s*(\d+)/;

Я хотел это одним выражением. Что-то типа

$a =~ /^(?:\s*(\d+)){10}/

Понятно что последнее не работает.

octy ★★
() автор топика
Ответ на: комментарий от m_

Не, внутри определения класса символов (т.е. внутри квадратных скобок) выражения к сожалению не работают.

octy ★★
() автор топика

printf «%+10d» 123 | perl -ne 'print «ok» if /^(\s*[-+]?)(??{«\\d{» . (10 - length($1)) . «}»})$/'

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.