Ben regex öğrenmeye çalışıyorum. Ben dizesi vardır:
$x = "5ft2inches";
Nasıl bir regex kullanarak bir diziye [5,2] okuyabilir?
Eğer dize formun olacağını varsayarak ise "{sayı} ft {sayı} santim" o zaman kullanabilirsiniz preg_match():
preg_match('/(\d+)ft(\d+)inches/', $string, $matches);
(\d+)
, bir veya daha fazla basamaklı bir dize maç olacak. Parantez preg_match()
$matches
değişkene (işlevine üçüncü argüman) eşleşen sayıları yerleştirmek için söyleyecektir. Bir eşleşme yapılmış eğer olmasaydı işlevi 0, 1 dönecektir.
İşte $matches
, başarılı bir maçtan sonra neye benzediğini:
Array
(
[0] => 5ft2inches
[1] => 5
[2] => 2
)
Tüm eşleşen dize ilk unsurdur, sonra parantez maçı izleyin. Yani istediğiniz dizi yapmak için:
$array = array($matches[1], $matches[2]);
Perl:
#!/usr/bin/perl
use strict;
use warnings;
my $x = "5ft2inches";
my %height;
@height{qw(feet inches)} = ($x =~ /^([0-9]+)ft([0-9]+)inches$/);
use Data::Dumper;
print Dumper \%height;
Çıktı:
$VAR1 = { 'feet' => '5', 'inches' => '2' };
Ya da kullanarak split
a>:
@height{qw(feet inches)} = split /ft|inches/, $x;
Düzenli ifadeler ile, ya bir contextless şekilde, ya da bir contextful şekilde veri elde edebilirsiniz.
IE, sen any basamak için maç ise: (\d+)
(NB: Assumes that your language honors \d as the shortcut for 'any digits')
Daha sonra but sizin dize aslında yerine "6ft2inches" VEYA "29Cabbages1Fish4Cows" nin "5 2inches" olduğunu bilmiyor olabilir, her grubu elde edebilirsiniz.
Eğer içerik eklerseniz: (\d+)ft(\d+)inches
Bunu bilmek için sure ne (aksi takdirde bir maç olsun istiyorum çünkü) ve ayak ve inç almak için sırayla her grup için başvurabilirsiniz ayıkladığınız ettik.
Her zaman ayıklamak için sayıların bir çift olacak değilseniz, size çeşitli bileşenleri isteğe bağlı olmak gerekir. Çıkış This Regular Expression Cheat Sheet daha fazla bilgi için (O'nun diğer hile yaprak çok şık olan),