Сохраняйте ИСТИННОЕ нежадное совпадение, используя Perl regex
Из следующего слова "tacacatac" я хочу сопоставить "кошка". Кажется, что регулярное выражение c.*? T должно дать мне это, но я предполагаю, что оно начинается с первого появления "c", а затем оттуда находит следующее "t" и, таким образом, соответствует "cacat".
Есть ли способ (возможно, с использованием негативного взгляда) начать смотреть с c перед самым последним t?
----- edit ----- Мне нужна опция, которая будет работать, если вы замените буквы на строки
Благодарю.
2 ответа
Решение
Попробуй это:
my $str = "the cat in the cat in the hat";
if ($str =~ /(cat(?:(?!cat).)*hat)/) {
print $1, "\n";
}
Вы можете использовать отрицательный класс символов:
c[^ct]*t
Это будет соответствовать любому персонажу, но c
а также t
между.