2

私は試した:

preg_match("/((\d)+,?)+/",$string)

それは正しい結果を返します:

1,2,3,4,5

しかし、それは以下とも一致します:

1,2a

1aaaa

1,2,3,

どうすればこれを修正できますか?

4

3 に答える 3

1

アンカー^を使用し$て、他の一致を防ぐことができます。

preg_match("/^((\d)+,?)+$/",$string)
             ^          ^

ただし...あなたの表現は次のようにより良いかもしれません:

preg_match("/^\d+(,\d+)*$/",$string)

何が起こっているかと((\d)+,?)+いうと、見つかった最初の数文字と一致し、完了すると一致したと表示されます。

アンカー^$は、それぞれ文字列の先頭と末尾を意味し、先頭が最後まで一致する必要があることを意味します。

于 2013-05-31T15:57:25.067 に答える
0

これを試して:

preg_match('~^(?:\d+(?:,(?!$)|$))+$~', $string);
于 2013-05-31T16:02:05.273 に答える