EDIT:
5n+12 3456 -5 2 123n+6 8n 13n-6 n+2
そして、これらは無効です:
25n.1 4x+4 2n+ 6N-2 8n-+5 n+-3 Rn+T x+1
は、質問
のEND EDIT
に指定されているこれらが有効な値である場合は負の数を許可するように改訂されました
この式で検証する必要があります。
^(-?\d+(n([+-]\d+)?)?)$
この式は言う:
^ # Assert beginning of line
(\d+ # Match one or more digits
(n # TRY to Match a literal n character
(\+\d+ # TRY to match a literal plus character followed by one or more digits
)? # END TRY
)? # END TRY
) # End Match
$ # Assert at end of string
TRY
sが検証しようとしますが、それがない場合は気にしないだろう。
EDIT:
上記の式は検証する必要がありますが、この表現はa
とb
ための番号のみをキャプチャするという名前のキャプチャグループa
とb
、と肯定先読みを使用して、正確にあなたが求める結果を出す必要がありますそして、+
シンボルを除外するが、唯一の負の数のため-
シンボルキャプチャする:
^(?:(?:(?P<a>-?\d*)n)?(?=[+-]?\d+|$)\+?(?P<b>-?\d+)?)$
結果はようでなければなりませんが次の:
:あなたは
n+2
と
2
のために結果を区別する何らかの問題が発生した場合
source a b
------ ------ ------
5n+12 5 12
3456 3456
2 2
123n+6 123 6
8n 8
-5 -5
13n-6 13 -6
n+2 2
n
私は<null value or nothing>
,zero length or null string>
対二分法は、PHPとpreg_match_all
にどのように動作するか完全にわからないので、私はこの表現を使用することをお勧めしますない場合は
^(?:(?P<n>(?P<a>-?\d*)n)?(?=[+-]?\d+|$)\+?(?P<b>-?\d+)?)$
これはn+2
、2
、および12n+2
のために、これが発生し、全体の「n」は式または何をキャプチャ:
source n a b
------ ------ ------ ------
2 2
n+2 n 2
12n+2 12n 12 2
提出された式がREGEXと一致する場合はtrueを返し、検証をパスします。私はREGEX自体にもっと興味があります。私はこれをPHPで使用しています。 – linkyndy
近いかもしれないが、検証に合格していないものの例を提供してください –
@linkyndy、ああ、申し訳ありませんが、私はあなたが "validate"と言ったところで "evaluate"を読んでいます。決して私のコメントに気をつけない。 –