0

現在、PHP の次の正規表現に小さな問題があります。

preg_match_all('/(.*)(XS|S|M|XL|XXL|L)(.*)/i', '00236XL00', $arr, PREG_PATTERN_ORDER);

Lこの場合、ご希望のサイズでお返しいたしますXL

ID にL(例: 002465L00) だけを指定すると、問題なく動作します。

私が何を間違えたのか教えてもらえますか?

グループの最後に移動しようとしましたLが、役に立ちませんでした。

4

2 に答える 2

3

最初のグループ(.*)は貪欲で、可能な限り一致します。最初のグループが "takes" の場合、2 番目のグループは引き続き一致するため00236X、そのようになります。上記のデータが典型的なものである場合、最も簡単な修正方法は、 を に変更する.こと[0-9]です。これはまだあなたのデータと一致しますか? そうでない場合は、さらに例を挙げてください。

貪欲さを避けるために、?演算子を使用して、代わりに他のグループを遅延させることができます。したがって、次のようなものが機能/(.*?)(XS|S|M|XL|XXL|L)(.*)/iするはずです。

于 2012-05-08T18:47:40.127 に答える
-1

あなたの ID は、サイズ コードを囲む数字だけのようです。では、キャラクター
を探すにはどうすればよいでしょうか。non-digit

preg_match_all('/([^0-9]+)/i', '00236XL00', $arr, PREG_PATTERN_ORDER);

著者のコメントの後に編集:

preg_match_all('/[A-Z][A-Z]\-\d+([A-Z]+)\d+/i', 'XX-00236XL00', $arr, PREG_PATTERN_ORDER);
于 2012-05-08T18:50:19.990 に答える