Каково различие в Perl при передаче переменной в регулярном выражении между использованием $variable и $ {переменная}

Вы должны группировать таблицу, когда пытаетесь выбрать такие функции, как count. Ответ будет выглядеть так:

SELECT fc.id AS replyId, user.username AS owner, fc.reply_content AS content, 
 fc.created_at AS createdAt, COUNT(rl.id) AS likes
 FROM forum_replies fc 
 JOIN users user
 ON fc.owner_id = user.id 
 JOIN reply_likes rl 
 ON fc.id = rl.reply_id
 WHERE fc.post_id = (I do not know what does it mean):postId AND fc.is_shown = 1
 GROUP BY fc.id, user.username, fc.reply_content, fc.created_at
 ORDER BY fc.created_at DESC

Только то, что я не понял, что означает "fc.post_id =: postId". В противном случае, после добавления «Сгруппировать по», ваш скрипт будет работать правильно.

6
задан 1800 INFORMATION 1 May 2009 в 10:22
поделиться

3 ответа

Если вы передадите переменную как $ {name}, это явно определяет, где находится конец имени переменной и где начинается остальная часть строки в кавычках. Например, в вашем коде:

if ($baseline !~ /^${component}_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&

Без разделителей {} :

if ($baseline !~ /^$component_(|.*_)$phase\.\d+(|[a-z]|-\d+|${automateddigit})$/ &&

Обратите внимание, что переменная $ component (вы можете ссылаться на нее в любом случае) будет неверно истолкована как $ component_ из-за завершающего подчеркивание в регулярном выражении.

7
ответ дан 10 December 2019 в 02:53
поделиться

Во-первых, это называется интерполяцией строк. Хорошая причина использовать его в этом случае - запретить интерпретацию $ project_root как $ project_root_ (обратите внимание на завершающее подчеркивание). Он делает явным имя переменной, вместо того, чтобы оставлять его более сложным правилам интерполяции.

См. Perldata для дополнительной информации об интерполяции, а также perlre и perlop об особенностях интерполяции в операторах регулярных выражений.

1
ответ дан 10 December 2019 в 02:53
поделиться

Как упоминалось выше, он предназначен для разделения имен переменных. Слишком много фигурных скобок делает сложные регулярные выражения еще сложнее. У фигурных скобок есть свои собственные регулярные выражения (для ограничения количества совпадений с шаблоном). Я бы порекомендовал использовать модификатор regexp / x и переписать ваше регулярное выражение следующим образом:

if ($baseline !~ /^$component    # Start with $component
                   _             # then an underscore
                   (|.*_)        # Then nothing, or anything followed by an underscore
                   $phase        # ...
                   \.\d+         # ...
                   (|            # Then optionally:
                      [a-z]|       # lower alpha
                      -\d+|        # or ...
                      $automateddigit
                   )
                   $/x &&
    $baseline !~ /^$project_root
                   _
                   $phase
                   \.\d+
                   (|
                     [a-z]|
                     -\d+|
                     $automateddigit
                   )$/x)
1
ответ дан 10 December 2019 в 02:53
поделиться
Другие вопросы по тегам:

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