preg_match の作成に行き詰まっています
私は文字列を持っています:
XPMG_ar121023.txt
と最初の数字の間の2文字を抽出する必要がありますXPMG_
-それは0-9です
$str = 'XPMG_ar121023.txt';
preg_match('/('XPMG_')|[0-9\,]))/', $str, $match);
print_r($match);
たぶんこれは最良の選択肢ではない: 私のキャラクターは常に
preg_match の作成に行き詰まっています
私は文字列を持っています:
XPMG_ar121023.txt
と最初の数字の間の2文字を抽出する必要がありますXPMG_
-それは0-9です
$str = 'XPMG_ar121023.txt';
preg_match('/('XPMG_')|[0-9\,]))/', $str, $match);
print_r($match);
たぶんこれは最良の選択肢ではない: 私のキャラクターは常に
あなたはただすることができます
$str = "XPMG_ar121023.txt" ;
preg_match('/_([a-z]+)/i', $str, $match);
var_dump($match[1]);
出力
string 'ar' (length=2)
これは正規表現としては単純すぎます。$match = substr($str,5,3)
あなたが求めているものを手に入れるだけです。
今後同様の問題を解決できるように、この手順を順を追って説明します。ファイル名に次の形式があるとします。
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
お役に立てれば。
さて、そうではありません:
$letters = $str[5].$str[6];
:)結局のところ、固定プレフィックスの後に常に2文字が必要です。正規表現を必要としない方法はたくさんあります(substr()
とにかく最高です)