5
<?php

    $string = 'user34567';

            if(preg_match('/user(^[0-9]{1,8}+$)/', $string)){
                echo 1;
            }

?>

文字列にuserという単語が続き、最大8記号の数字が続くかどうかを確認したいと思います。

4

5 に答える 5

10

あなたは実際に非常に近いです:

if(preg_match('/^user[0-9]{1,8}$/', $string)){

「文字列の先頭で一致する必要がある」のアンカーは、一番前にあり、その後に「user」リテラルが続く必要があります。次に、文字セット[0-9]と乗数を指定します{1,8}。最後に、「文字列の最後で一致する必要がある」アンカーで終了します。

元の表現に関するいくつかのコメント:

  1. ^文字列の先頭に一致するため、この式内の他の場所に文字列を記述しますが、先頭では期待どおりの結果が得られません。
  2. これ+は乗数です。{1,8}も1つですが、式の後に使用できる乗数は1つだけです
  3. 式で見つけた数字を使用するつもりでない限り、括弧は必要ありません。

ところで、あなたの代わりに[0-9]を使用することもできます\d。これは正規表現を短縮する自動文字グループですが、この特定の文字はあまり多くの文字を保存しません;-)

于 2012-06-12T15:23:47.183 に答える
3

とを使用する^$、パターンがライン上の唯一のものである場合にのみ一致します。それはあなたが望むものですか?その場合は、以下を使用してください。

preg_match( '/^user[0-9]{1,8}[^0-9]$/' , $string );

このパターンを行のどこかで見つけたい場合は、次のことを試してください。

preg_match( '/user[0-9]{1,8}[^0-9]/' , $string );

いつものように、正規表現のテストを単独で行うには、RegexPalなどの参照ツールを使用する必要があります。

于 2012-06-12T15:28:44.417 に答える
2

あなたは近くにいました、ここにあなたの正規表現があります:/^user[0-9]{1,8}$/

于 2012-06-12T15:23:53.903 に答える
1

代わりに、次の正規表現を試してください。

/^user([0-9]{1,8})$/

于 2012-06-12T15:23:57.697 に答える
1

この正規表現を使用します。

/^user\d{1,8}$/
于 2012-06-12T15:23:58.337 に答える