現在、PHP の次の正規表現に小さな問題があります。
preg_match_all('/(.*)(XS|S|M|XL|XXL|L)(.*)/i', '00236XL00', $arr, PREG_PATTERN_ORDER);
L
この場合、ご希望のサイズでお返しいたしますXL
。
ID にL
(例: 002465L00) だけを指定すると、問題なく動作します。
私が何を間違えたのか教えてもらえますか?
グループの最後に移動しようとしましたL
が、役に立ちませんでした。
最初のグループ(.*)
は貪欲で、可能な限り一致します。最初のグループが "takes" の場合、2 番目のグループは引き続き一致するため00236X
、そのようになります。上記のデータが典型的なものである場合、最も簡単な修正方法は、 を に変更する.
こと[0-9]
です。これはまだあなたのデータと一致しますか? そうでない場合は、さらに例を挙げてください。
貪欲さを避けるために、?
演算子を使用して、代わりに他のグループを遅延させることができます。したがって、次のようなものが機能/(.*?)(XS|S|M|XL|XXL|L)(.*)/i
するはずです。
あなたの 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);