0

我目前对 PHP 中的以下正则表达式有一个小问题:

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

在这种情况下,它会返回L我想要的大小。XL

如果我提供一个只有L(例如 002465L00)的 ID,它工作正常。

你能告诉我我做错了什么吗?

我尝试将L移到组的末尾,但没有帮助。

4

2 回答 2

3

第一组 ,(.*)是贪婪的,会尽可能匹配。由于如果第一组“接受” 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 回答