1

preg_match の作成に行き詰まっています

私は文字列を持っています:

XPMG_ar121023.txt

と最初の数字の間の2文字を抽出する必要がありますXPMG_-それは0-9です

$str = 'XPMG_ar121023.txt';
preg_match('/('XPMG_')|[0-9\,]))/', $str, $match);
print_r($match);

たぶんこれは最良の選択肢ではない: 私のキャラクターは常に

4

4 に答える 4

2

あなたはただすることができます

$str = "XPMG_ar121023.txt" ;
preg_match('/_([a-z]+)/i', $str, $match);
var_dump($match[1]);

出力

string 'ar' (length=2)
于 2012-10-24T18:30:53.333 に答える
1

これは正規表現としては単純すぎます。$match = substr($str,5,3)あなたが求めているものを手に入れるだけです。

于 2012-10-24T18:30:34.293 に答える
1

今後同様の問題を解決できるように、この手順を順を追って説明します。ファイル名に次の形式があるとします。

XPMG_ar121023.txt

キャプチャしたいものはわかっています。_ の直後、数字が始まる直前に「ar」が必要です。したがって、式は次のようになります。

_[a-z]+

これはかなり簡単です。アンダースコアを探すことから始め、その後に a と z の間の任意の数の文字が続きます。角括弧は文字クラスを定義します。私たちのクラスはアルファベットで構成されていますが、必要に応じて特定の数字などをそこにプッシュできます。

文字だけをキャプチャしたいので、パターンのその部分を括弧で囲む必要があります。

_([a-z]+)

その結果、そのサブパターンのみにアクセスできるようになります。次に、区切り文字を配置して、パターンの開始位置と終了位置を指定します。

/_([a-z]+)/

最後に、終了区切り文字の後にいくつかの修飾子を追加できます。書かれているように、私たちのパターンは小文字のみを探します。修飾子を追加しiて、大文字と小文字を区別しないようにすることができます。

/_([a-z]+)/i

出来上がり、完了です。これを に渡して、preg_match何を吐き出すかを確認できます。

preg_match( "/_([a-z]+)/i", "XPMG_ar121023.txt", $match );

この関数は、最初のパラメーターとしてパターンを受け取り、2 番目のパラメーターとしてパターンと照合する文字列を受け取り、最後に結果を吐き出す変数を受け取ります。すべてが完了したら$match、データを確認できます。

この操作の結果は次のとおりです。

array(2) { 
    [0]=> string(3) "_ar" 
    [1]=> string(2) "ar" 
}

の内容です$match。完全なパターンが配列の最初のインデックスにあり、キャプチャされた部分が配列の 2 番目のインデックスにあることに注意してください。

echo $match[1]; // ar

お役に立てれば。

于 2012-10-24T18:50:27.620 に答える
0

さて、そうではありません:

$letters = $str[5].$str[6];

:)結局のところ、固定プレフィックスの後に常に2文字が必要です。正規表現を必要としない方法はたくさんあります(substr()とにかく最高です)

于 2012-10-24T18:31:03.343 に答える