Могу ли я использовать полное слово, чтобы разбить строку? - PullRequest
0 голосов
/ 14 февраля 2019

Это может быть простой вопрос.У меня есть строка, которая соответствует содержанию.Он будет содержать слово "IMAGE".Я хочу быть в состоянии разделить это слово, поэтому я получаю содержание после слова.Я пытался:

my @sname = split('IMAGE', $fshare);

$fshare содержит строку, такую ​​как '\\Disk\InfoIMAGEstuff'.Я хочу 'stuff' часть.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Если вы просто хотите получить часть после строки, вы можете избежать использования split (и механизма RegEx) вместе и использовать вместо этого строковые операции.

my $string = '\\Disk\InfoIMAGEstuff';
my $delim  = 'IMAGE';
my $post   = substr($string, index($string, $delim) + length($delim));

Это не супер красиво,но он в два раза быстрее, чем при использовании split.Несмотря на то, что мы вызываем 3 функции (substr, index и length), операции с строками, подобные этим, невероятно быстры.

В этом примере index соответствует первому вхождению $delim.Если вы хотите соответствовать последнему вхождению, используйте rindex.

0 голосов
/ 14 февраля 2019

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

my ($before, $after) = split /IMAGE/, $fshare, 2;

Если строка, на которую вы хотите разделить, содержит метасимволы регулярных выражений, вам нужноиспользуйте \ Q , чтобы строка интерпретировалась буквально.

my ($before, $after) = split /\Qfoo.bar/, $fshare, 2;

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

my ($after) = $fshare =~ m/IMAGE(.*)/s;

Модификатор /s позволяет . дополнительно сопоставлять символы новой строки.

...