Сохраняйте ИСТИННОЕ нежадное совпадение, используя 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 между.

Другие вопросы по тегам