2014-12-18 1 views
0

Я недавно работал над проблемой строки в Perl, и я не могу получить слышащими вокруг одной определенной части>Доступ изменил строку Perl

Допустим, у нас есть строка $ Str = «tltltltltltltlttl»; Существует определенная область в строке, которая нас интересует, скажем, от 10-го символа до 15-го символа. мы запускаем строку через программу, которая дает нам 2d конформацию этой строке например> $ str2 =

<pre> 
tl  t  
    tltltl tl 
      t 
      tl 
tltltlt tltl 
     l tl 
</pre> 

Я прекрасно понимал, как один должно найти разыскиваемую область в $ ул (только использовать substr $str, 10, 6. Допустим, мы сохраняем этот регион как $ региона. вопрос заключается в том. Как я считаю, что точная область в $ str2, с расположением символов же, как и в первой строке, например,>

<pre> 
$str =tltltl; $region = substr $str,2,5 
$str2 = 
tl 
    t (this is the first char I want located in $str2) 
    l (this is the second char I want located in $str2) 
t 
l 

</pre> 

Я не могу каким-то образом отобразить регионы от первого до некоторого кода, который бы явным образом сказал мне, где находятся rela в $ str2. SO в основном мне нужно как-то поддерживать индекс через преобразование в $ str2 процесс. Спасибо.

+0

Каков ожидаемый результат? – Toto

+0

Просто отредактировал этот вопрос, посмотри. (результат - это область из $ str, расположенная в $ str2 каким-то образом.) –

ответ

1

Я считаю, что вы ищете является index функцией

my $str = "tltltl"; 
my $region = substr($str,3,3); #ltl 
my $str2 = "tlltl"; 
my $idx = index("$str2", "$region"); 
#idx is now 2 which is the starting position of ltl in tlltl 
+0

Это хорошо работает для 1-й строки, но при попытке найти тот же регион из 1d в 2d, он не работает. (или я просто этого не вижу).Дело в том, что индексы символов в 2d отличаются от индексов в 1d –

+0

. Я добавил флаги smg для обработки ваших случаев. –

+0

Так что я в основном пытаюсь выполнить, это сохранить индексы из строки в строковой структуре 2d. Я не думаю, что этот код делает это (исправьте меня, если я ошибаюсь). Извините, если я не представил проблему правильно. –

1

Чтобы сделать это, вы хотите использовать substr. Здесь вы найдете множество примеров наиболее основных случаев: http://perldoc.perl.org/functions/substr.html

В приведенном ниже примере первое число (10) указывает смещение символа (как далеко от начала, которое вы хотите запустить), так и второе число (4) указывает длину вашей новой подстроки.

Пример:

$string = "tltltltltltltlt"; 

$specificRegion = substr $string, 10, 4; 

print "This is the region we care about: $specificRegion"; 

RESULT: 
tltl 

Теперь у вас есть переменная $specificRegion доступной для использования, который является регионом вы хотите, чтобы захватить для манипуляции

+0

Вы не совсем поняли проблему. Когда я хочу найти эту конкретную область в моей 2-строчной строковой структуре, она находит правильный onke и многие другие, которые неверны. Подстрока, я предполагаю, должна быть, по крайней мере, частью решения, которое, по его мнению, является. –

+0

Вы сказали: «Вопрос в том, как узнать, где находится конкретный регион, отмеченный на первом шаге, т. Е. Где находится регион, который мы хотим заменить». Мой ответ должен был ответить на это, если найти конкретный регион (символы 10-13) в исходной строке, как я думал, вы спрашиваете. Не могли бы вы прояснить, что вы ищете, и чего вы ожидаете в результате? – laurenOlga

+0

Проблема с вашим кодом следующая: когда я пытаюсь найти этот $ specificregion в моей 2d-структуре ($ str2), что происходит, Perl находит A :: последовательности $ specificregion в нем, но я хочу, чтобы только один из них $ str. Причиной многих результатов являются многочисленные повторения символов в этой задаче. –