2014-01-22 2 views
0

я мог разделитьфункция Замена, чтобы очистить строку

$string = "AA_name" 

в @tmp массив и захватить $ TMP [1], чтобы получить только имя и отбрасывать AA_. Однако как вы это сделаете с помощью s ///? Я не знаю регулярное выражение, чтобы заменить все предыдущее и, в том числе, подчеркивание, чтобы ничто не оставило меня только имя. Что-то вроде

$n = $string =~ s/^_//; 

Но я довольно нуб с регулярным выражением.

ответ

0

Вы можете использовать следующее регулярное выражение

$string = "AA_name"; 
($name,undef) = $string =~ /(.*)_.*/; 
print "name=$name", ",Val=" , $string; 
+0

спасибо. Я думаю, я понимаю это регулярное выражение. Однако, что, если разделитель в моей строке был точкой. Например, AA.name? – user2674514

+0

Тогда у вас должно быть регулярное выражение, например $ string = ~ /(.*)\..*/ – Raghuram

+0

Спасибо Рагурам. – user2674514

0

Вы можете сделать следующее:

use strict; 
use warnings; 

my $string = "AA_name"; 
(my $n = $string) =~ s/.*_//; 
print $n; 

Выход:

name 

Если разделитель точка, то вы можете использовать s/.*\.// (ускользает от точки), или вы можете использовать класс символов: s/.*[.]//.

+0

Побег над точкой или символьным классом. Спасибо, что сделал меня немного более мудрее с регулярным выражением. – user2674514

+0

@ user2674514 - Побег точки, так как это метасимвол, который соответствует любому одиночному символу, кроме новой строки (если не установлен определенный флаг). – Kenosis

1

Вы можете использовать:

$string =~ s/^[^_]+_//; 

Это означает, что заменить все ведущие символы, которые не подчеркивания, плюс подчеркивание, ни с чем; что означает, что последующие символы подчеркивания остаются там, т.е.

AA_My_Name ==> My_Name 

Если вы хотите удалены до последнего '_', то используйте:

$string =~ s/^.+_//; 

Другие сепараторы могут быть использованы. Если вы хотите использовать '.' то не забудьте сбежать от него с помощью '\'.

Обратите внимание, что вам не нужно присваивать результат чему-либо. s /// изменяет строку аргумента.

+0

Да, это очень хороший момент. У меня могут быть случаи, когда может быть другой символ подчеркивания. Спасибо. – user2674514

+0

Ваш пример замены первого символа подчеркивания отлично справился. Я попытался использовать то же самое, чтобы удалить последнее вхождение «/» в строке пути, например/home/usr/name, используя следующее и не работает $ path = ~ s /^.+\/// ; Любое предположение о том, почему это не работает? Мой желаемый результат - $ path = name – user2674514

Смежные вопросы