проверка, содержит ли строка символ - PullRequest
0 голосов
/ 25 апреля 2011

Я пытаюсь выполнить простую проверку, чтобы увидеть, содержит ли строка «%», но всякий раз, когда я выполняю свой код, он оценивает оператор if как ложный независимо от того, что находится в строке.Мой код выглядит следующим образом:

if ($end_time =~ m{%%}) {
    ($percentage) = $end_time =~ m/=([^%%]*)%%/g;
    $percentage = sprintf("%s%%", $percentage);
    $end_time = "";
}
elsif ($duration =~ m/(overdue)/) {
    $percentage = "$end_time $duration";
    $end_time = "";
}
else {
    $percentage = "100%";
}

и ожидаемые значения $ end_time, замените любые числовые значения, которые вам нравятся.

"5%" or "==30%" or "+3m:26s overdue" or "13:48:40"

Так что, если $ end_time содержит "просрочено" или "% "процент будет равен 100%, а $ end_time будет тем, что было там до проверки.И я понимаю, почему я получаю результаты, которые я получаю, но не причина, по которой мои операторы if всегда оцениваются как ложные.

Ответы [ 2 ]

5 голосов
/ 25 апреля 2011

Строковые литералы и литералы регулярных выражений экранируются с \, не удваиваясь, и % не нужно экранировать ни одним из них.

if ($end_time =~ m{%}) {
    ($percentage) = $end_time =~ m/=([^%]*)%/g;
    $percentage = sprintf("%s%%", $percentage);
    $end_time = "";

sprintf принимает строку с удвоенным числом % для обозначения %, но это не связано со строками и шаблонами регулярных выражений.

3 голосов
/ 25 апреля 2011

Вы также можете проверить, находится ли "%" внутри вашей строки, используя строковые функции, такие как index()

...