0

私はこれを30分間研究してきましたが、それでも理解できません。簡単だと思います。

IDを照合したいのですが、前に「ID:」がある場合に限ります。

<?php
$string1 = "Payment: 1474";
$string2 = "Payment ID: 1474";

preg_match('/ID: ([0-9]){1,7}$/', $string1, $matches);

//array(0){} Good! This is the expected result.

preg_match('/ID: ([0-9]){1,7}$/', $string2, $matches);

//array(2) { [0]=> string(8) "ID: 1474" [1]=> string(1) "4" }
//I am glad it finds a match, but I want matches[0] to be only the id, 1474

?>

つまり、一致するものを見つける必要がありますが、配列に何を入れるかを指定する必要もあります。

私はこれを学ぶのに苦労しているので、コードで答えるだけでなく、それが何をするのかを説明していただければ幸いです。ありがとう!

4

3 に答える 3

5

これを試して:

preg_match('/ID: ([0-9]{1,7})$/', $string2, $matches);

あなたのコードでは、キャプチャ グループは 1 文字だけに一致していました。これは、キャプチャ グループ内の 1 ~ 7 個の数字に一致します。

于 2013-03-14T01:13:40.393 に答える
0

括弧は、一致した式の一部をキャプチャし、それを$matches[1]に格納します。これは、必要なものを正確に取得するための最良の方法です。クロージングパレンを{1,7}パーツの右側に移動するだけです。

preg_match("/ID: (\d{1,7})/", $string2, $matches);
$id = $matches[1];
于 2013-03-14T01:16:50.880 に答える
0

議論のために:

  preg_match('/(?<=ID: )[0-9]{1,7}$/', $string2, $matches);

(これは、一致の前にこれが付いているかどうかだけを確認する後読み演算子ですが、実際には結果の一致の一部ではありません。ただし、'番目のインデックスに含まれている(?<=)必要がある正当な理由を考えるのに苦労しています...。と言うだけで、データはありますか?0$id=$matches[1]

于 2013-03-14T01:17:27.197 に答える