2

重複の可能性:
正規表現で ^ と $ はどういう意味ですか?

私は正規表現がまったく得意ではありません。正規表現が非常に重要であることは知っていますが、勉強する時間がありませんでした。とにかく、これらの文字列の中で、次のことを確認しようとしています:

MAX_AGE_60
MAX_AGE_80
...
MAX_AGE_X

より一般的Xには aintegerであり、少なくとも 1 つの一致が見つかり、番号が取得されXます。PHPドキュメントの例に従って、私はこれを書きました:

// Starts and ends with the literal 'MAX_AGE_' followed by a group that is a 
// number with at least one digit. Case insensitive
$pattern = '/^MAX_AGE_(?P<max>\d+)$/i';

$test    = 'MAX_AGE_80';
$matches = array();

preg_match($pattern, $test, $matches);
var_dump($matches);

結果は間違っています (驚き...):

array (size=0)
  empty

開始/終了区切り文字 (^および$) を削除すると、正しい結果が得られます。

array (size=3)
  0     => string 'MAX_AGE_80' (length=10)
  'max' => string '80' (length=2)
  1     => string '80' (length=2)

では、文字列がそのパターンで開始および終了する必要があることを強制できないのはなぜですか? そして、結果の配列をどのように解釈する必要がありますか? 私はインデックスを意味0し、1そしてmax

4

2 に答える 2

2

かっこの間で何をしているのかわかりません。これを試して:

$pattern = '/^MAX_AGE_[\p{N}]+$/iu';

^$ と not の違いは、LINE の最初または最後にある一致のみにフラグを立てることです。

このサイトを使用して式をテストできます (非 Unicode): http://www.gskinner.com/RegExr/

于 2012-05-18T15:35:16.443 に答える
0

使ってみて

$pattern = '/^MAX_AGE_(?P<max>\d+)\s*$/i';

行末の前に空白がある可能性があるためです。

于 2012-05-18T15:52:28.430 に答える