Ниже две строки точно такие же, но я не могу сопоставить использование регулярных выражений? Может ли кто-нибудь помочь мне в этом?Строковое совпадение, исключая скобки
$x="Enzyme(s)"; $y="Enzyme(s)";
if ($x =~ /^$y$/){print "String Matches"};
Ниже две строки точно такие же, но я не могу сопоставить использование регулярных выражений? Может ли кто-нибудь помочь мне в этом?Строковое совпадение, исключая скобки
$x="Enzyme(s)"; $y="Enzyme(s)";
if ($x =~ /^$y$/){print "String Matches"};
Скобки в строке соответствия, $ y, интерпретируются как группировка или захват. Они должны быть «экранированы», чтобы их можно было рассматривать как нормальных персонажей.
Введите следующий код после назначения $ y.
$y =~ s/\(/\\(/g; # escape left parens
$y =~ s/\)/\\)/g; # escape right parens
The 's' предназначен для 'замены'.
«g» предназначен для «глобальной» замены. I.e., замените все вхождения в строке.
использование quotemeta:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
$y = quotemeta($y);
if ($x =~ /^$y$/){print "String Matches"};
Вы должны использовать quotemeta
, как M42 уже упоминалось, или, чтобы избежать дополнительной строки кода и постоянное изменение переменной $ у, вы можете использовать \Q...\E
в регулярных выражениях, которые отключают все метасимволы рисунка в пределах диапазона:
my $x="Enzyme(s)";
my $y="Enzyme(s)";
if ($x =~ /^\Q$y\E$/){print "String Matches"};
Это работает. Спасибо –
Добро пожаловать! (Добро пожаловать в StackOverflow! На этом этапе вы должны «принять» мой ответ, чтобы поддержать меня ...; ^) – marklark