2

正規表現は次のとおりです。

"'(\d{4})-(.*)-(\d{4})'i"

数字の最初の部分 (\d{4}) を一致させたいのですが、これは最後の部分と同じでなければなりません

このような:

  • 1111-abcdefg-2222 = 無効
  • 1111-x-1111 = 有効
  • 0000-rwrgreheherhe-0000 = 有効
  • 1234-abcd-5678 - 無効

どうすればこれを達成できますか?

アップデート

次のスクリプトを使用して出力を確認します

$i = '1111-abcd-1111';
preg_match("'(\d{4})-(.*)-(\1)'i",$i,$m);
echo print_r($m,true);

しかし、空の配列を返しますか?

4

4 に答える 4

2

後方参照を使用します。

'/(\d{4})-(.*)-\1/i'

\1最初のキャプチャ グループでキャプチャしたものと同じです。

于 2013-09-15T17:58:07.050 に答える
1

\1最初のキャプチャ グループへの後方参照として使用します。

'~(\d{4})-(.*)-\1~'

ここで実際に見てください:http://codepad.viper-7.com/2Jw0dL

于 2013-09-15T17:57:40.883 に答える
1

後方参照を使用する必要があります。

"'(\d{4})-(.*)-\1'i"
于 2013-09-15T17:58:02.080 に答える
0
preg_match("'(\d{4})-(.*)-(\g1)'i",$i,$m);

\g1 を後方参照に追加します: http://php.net/manual/en/regexp.reference.back-references.php

PHP 5.2.2 以降、サブパターンの絶対参照および相対参照に \g エスケープ シーケンスを使用できます。このエスケープ シーケンスの後には、符号なしの数値または負の数値を続ける必要があり、オプションで中括弧で囲む必要があります。シーケンス \1、\g1、および \g{1} は互いに同義です。符号なしの数値でこのパターンを使用すると、バックスラッシュの後に数字を使用する場合に固有のあいまいさを取り除くことができます。このシーケンスは、後方参照と 8 進文字を区別するのに役立ちます。また、後方参照の後にリテラル番号 (\g{2}1 など) を付けやすくします。

于 2015-01-13T17:27:46.337 に答える