Perl разделен, но сохранить специальный разделитель со второй строкой - PullRequest
0 голосов
/ 18 декабря 2018

У меня есть следующая строка, которую нужно разделить, но мне нужно сохранить разделитель со второй частью строки.Таким образом, я получаю:

$a = 'State of mind is primary';
$b = '\098\455\098evertyhing else is secondary.-Eckhart Tolle '

Моя попытка:

my $string = 'State of mind is primary\098\455\098evertyhing else is secondary. -Eckhart Tolle';

my $separator = '\098\455\098';
my ($a, $b) = split($separator, $string);
print "$a\n";
print "$b\n";

Как мне это сделать с помощью Perl Split?

Ответы [ 3 ]

0 голосов
/ 18 декабря 2018

Разделить строку длиной 0, которая предшествует последовательности.

my ($x, $y) = split(/(?=\\098\\455\\098)/, $string);
0 голосов
/ 18 декабря 2018

Используйте положительный прогноз.

(я упростил ваш разделитель, чтобы устранить один потенциальный источник путаницы)

#!/usr/bin/perl

use strict;
use warnings;
use feature 'say';

my $string = 'State of mind is primaryXXXevertyhing else is secondary. -Eckhart Tolle';
my $separator = 'XXX';

my ($first, $second) = split /(?=$separator)/, $string;

say "$first / $second";

И вывод:

$ perl split
State of mind is primary / XXXevertyhing else is secondary. -Eckhart Tolle
0 голосов
/ 18 декабря 2018

Не использовать split() использовать сопоставление с образцом.

РЕДАКТИРОВАТЬ Я думаю, вы действительно имели в виду \ не восьмеричные символы:

my $string = "State of mind is primary\\098\\455\\098\everything else is secondary. -Eckhart Tolle";
my($a, $b) = ($string =~ /^(.+)(\\098\\455\\098.+)$/);
print "A: '$a'\n";
print "B: '$b'\n";

вывод:

A: 'State of mind is primary'
B: '\098\455\098ertyhing else is secondary. -Eckhart Tolle'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...