Perl поиск и замена последнего появления символа - PullRequest
7 голосов
/ 30 июня 2011

У меня есть то, что я думаю, было бы легко решить, но я не могу найти ответ на этот вопрос.

Как я могу найти и заменить последнее вхождение символа в строку?

У меня есть строка: GE1 / 0/1, и я хотел бы, чтобы она была: GE1 / 0: 1 <- Это может быть переменной длины, поэтому не нужно использовать подстроки. </p>

Уточнение: Я хочу заменить последний / на: независимо от того, что будет до или после него.

Ответы [ 4 ]

11 голосов
/ 30 июня 2011
use strict;
use warnings;
my $a = 'GE1/0/1';
(my $b = $a) =~ s{(.*)/}{$1:}xms;
print "$b\n";

Я использую жадное поведение .*

5 голосов
/ 30 июня 2011

Возможно, я не понимаю проблему с переменной длиной, но я бы сделал следующее:

Вы можете сопоставить то, что вы хотите с регулярным выражением:

(.+)/

Итак, этот Perlscript

my $text = 'GE1/0/1';
$text =~ s|(.+)/|$1:|;
print 'Result : '.$text;

выведет:

Result : GE1/0:1

Квантор '+' по умолчанию является жадным, он будет соответствовать только последнему символу косой черты.

Hopeэто то, что вы спрашивали.

2 голосов
/ 30 июня 2011

Это находит косую черту и смотрит вперед, чтобы удостовериться, что больше нет косых черт за ней.но perl не мой язык:

$string =~ s!/(?=[^/]*$)!\:!g;
1 голос
/ 30 июня 2011

«последнее вхождение в строку» слегка двусмысленно. Как я вижу, вы можете иметь в виду либо:

"Foo: 123, yada: GE1/0/1, Bar: null"

Значение последнего вхождения в «слове» GE1 / 0/1 или:

"GE1/0/1" 

как полная строка.

В последнем случае это довольно простой вопрос, вам нужно только решить, насколько конкретно вы можете быть в своем регулярном выражении.

$str =~ s{/(\d+)$}{:$1};

Прекрасно, если предположить, что последний символ (ы) может состоять только из цифр.

В первом случае, о котором я не думаю, что вы имеете в виду, но я все равно включу, вам нужно быть гораздо более конкретным:

$str =~ s{(\byada:\s+\w+/\w+)/(\w+\b)}{$1:$2};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...