私は正規表現を学ぼうとしています。私は文字列を持っています:正規表現を使用して文字列からすべての整数値を抽出するにはどうすればよいですか?
$x = "5ft2inches";
[5,2]を正規表現を使って配列に読み込む方法はありますか?
私は正規表現を学ぼうとしています。私は文字列を持っています:正規表現を使用して文字列からすべての整数値を抽出するにはどうすればよいですか?
$x = "5ft2inches";
[5,2]を正規表現を使って配列に読み込む方法はありますか?
あなたは文字列は、あなたがpreg_match()を使用することができ、フォーム「{番号}フィート{番号}インチ」のものであろうと想定している場合:
preg_match('/(\d+)ft(\d+)inches/', $string, $matches);
(\d+)
1桁以上の文字列にマッチします。括弧は$matches
変数(関数の第三引数)にマッチした数字を配置するpreg_match()
を教えてくれます。この関数は、一致した場合は1を返し、一致しなかった場合は0を返します。ここで
が$matches
が成功した試合後に次のようになります。
Array
(
[0] => 5ft2inches
[1] => 5
[2] => 2
)
全体マッチした文字列が最初の要素である、そして、括弧内の一致が続きます。したがって、目的の配列を作成するには:
$array = array($matches[1], $matches[2]);
正規表現は、単に/[0-9]+/
ですが、どのように配列にそれを得るためには、使用しているもののプログラミング言語に完全に依存します。
あなたは、一般的な解決策であるので、ここで、使用している言語を言及していない:あなたは空の文字列と数字以外のすべてを置き換える、数字を「抽出」しません。 C#ので
、これはPerlで
string numbers = Regex.Replace(dirtyString, "[^0-9]", "");
これは彼の提供例に適合していません。元の文字列に2つの整数(5と2)か1つ(52)があるかどうかを後で判断できないという意味で "52"が生成されます。 –
ベン - そうです。私の悪い。 –
次のようになります。
#!/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;
出力:
$VAR1 = { 'feet' => '5', 'inches' => '2' };
または、split
を使用して:
@height{qw(feet inches)} = split /ft|inches/, $x;
これとPHPの答えをアップしてください。他の多くの言語では、変数に '$'をつけているわけではありません。 –
正規表現を使用すると、コンテキストのない方法で、またはコンテキストに応じた方法でデータを抽出できます。
IE、あなたがのために任意の桁一致した場合:(\d+)
(NB:あなたの言語の名誉は「任意の数字」ためのショートカットとしてD \ことを前提とし)
をあなたはその後、各グループを抽出することができ、が、あなたの文字列ではなく、「6ft2inches」OR「29Cabbages1Fish4Cows」の実際には「5つの2インチ」であったことを知っていない可能性があります。
あなたはコンテキストを追加する場合:(\d+)ft(\d+)inches
あなたは(そうでなければ、試合を取得していないと思いますので)あなたが抽出されたもの確かのために知っていて、フィートとインチを得るために、順番に各グループを参照することができます。
あなたは常に抽出する数値のペアを持っているつもりはない場合は、さまざまなコンポーネントをオプションにする必要があります。詳細は(彼の他のチートシートがあまりにも気の利いある)This Regular Expression Cheat Sheetをチェックアウト、
は二桁の数字に注意しなければなりません。
/\ dの{1,2}/
はフィートとインチのために少し良く働くかもしれません。適切な値に「2」の最大値を設定する必要があります。
use `/[\d]/`
PHPを仮定すると、誰も分裂を示唆していない理由はありますか?
$numbers = preg_split('/[^0-9]+/', $x, -1, PREG_SPLIT_NO_EMPTY);
**あなたが望んでいないものに分割する方がよいでしょう。私の答えを見てください(Perlでも)。 –
[^ 0-9] +は数字ではないすべてのもので、私たちが望まないものです。 – thorncp
あなたは、任意の入力を処理するために、 '/' preg_match_all'を使用して、ちょうど正規表現 '/(\ dは+)を使用する必要があります。 –
+1正しく言語を推測する。 –