От this article,Как работает это регулярное выражение?
/^1?$|^(11+?)\1+$/
проверяет, является ли число (его значение в унальном) простым или нет.
Используя это, perl -l -e '(1 x $_) !~ /^1?$|^(11+?)\1+$/ && print while ++$_;'
возвращает список простых чисел.
У меня недостаточно опыта работы с Perl, но я понимаю, что регулярное выражение будет true для числа, которое не является простым. Итак, если мы напечатаем все числа, которые не производят true с этим выражением, у нас есть список простых чисел. То, что пытается выполнить запрос perl.
О регулярных выражений часть,
^1?$
часть для подсчета 1, как не первична
^(11+?)\1+$
для согласования не простых чисел, начиная с 4
То, что я не понять, почему ?
в регулярном выражении необходимо вообще. По мне /^1$|^(11+)\1+$/
должно быть прекрасно, и на самом деле
perl -l -e '(1 x $_) !~ /^1$|^(11+)\1+$/ && print while ++$_;'
дает мне тот же набор простых чисел.
Есть ли недостаток в моем понимании регулярного выражения? Почему нужны ?
?
Не соответствует ли ?
нулю или одному вхождению предшествующего ему выражения?
@cjm: Является ли это стандартным способом выражения неживой? Где все работает, кроме '+? 'И' *? '. Я думал, что '?' Означает совпадение нуля или один раз. – Lazer
@Lazer: знак вопроса после квантификатора (например, '+' или '*') полностью отличается от знака, следующего за токеном. – Borealid
'' ', который следует за другим квантором, делает этот квантор неживым. См. Http://perldoc.perl.org/perlre.html#Quantifiers – cjm