0

大文字と数字で分割するには、このスクリプトが必要です。大文字の分割は機能していますが、数字の側面がわかりません。

必要な結果:Hvac System 8000 Series :: Heating System 8000 Series :: Boilers

#!/usr/bin/perl

print "Content-type: text/html\n\n";

use CGI qw(:standard);
use CGI::Carp qw(warningsToBrowser fatalsToBrowser);
use strict;

my $Last_URL = "HvacSystem8000Series/HeatingSystem8000Series/Boilers";


my ($Cat,$Sub1,$Sub2) = split(/\//, $Last_URL, 3);

if ($Sub2) {

    $Last_URL = "<b>$Cat :: $Sub1 :: $Sub2</b>";
}
else {

    $Last_URL = "<b>$Cat :: $Sub1</b>";
}

my @Last_URL = $Last_URL =~ s/(.)([A-Z][^A-Z][^0-9])/$1 $2/g;
print "$Last_URL";
4

3 に答える 3

1

いくつかのs///変換により、必要なものが得られます。

for ($Last_URL) {
    s/ ([a-z]) ([A-Z0-9]) / "$1 $2" /egx;  # Foo123 -> Foo 123
    s/ ([0-9]) ([A-Z]) / "$1 $2" /egx;     # 123Bar -> 123 Bar
    s! / ! " :: " !egx;                    #   /    -> " :: "
}
print $Last_URL, "\n";
于 2012-10-10T18:28:23.927 に答える
0

正規表現の一致を使用して、文字列内の必要なすべての「単語」を検索し、それらをスペースで結合することをお勧めします。このプログラムは実演します。単語としてカウント/されるため、これらをダブルコロンの代わりに使用してプロセスを完了することができます

use strict;
use warnings;

my $Last_URL = "HvacSystem8000Series/HeatingSystem8000Series/Boilers";

(my $string = join ' ', $Last_URL =~ m<[A-Z][a-z]*|\d+|/>g) =~ s|/|::|g;

print $string;

出力

Hvac System 8000 Series :: Heating System 8000 Series :: Boilers
于 2012-10-10T19:59:54.503 に答える
0

段落記号の答えのようですが、あなたが知っている、異なる

#!/usr/bin/env perl

use strict;
use warnings;

my $string = "HvacSystem8000Series/HeatingSystem8000Series/Boilers";

$string =~ s/(?<=\p{Ll})(?=\p{Lu}|\pN)/ /g;
$string =~ s/(?<=\pN)(?=\p{Lu})/ /g;
$string =~ s'/' :: 'g;

print "$string\n";
于 2012-10-10T23:57:39.967 に答える