我目前对 PHP 中的以下正则表达式有一个小问题:
preg_match_all('/(.*)(XS|S|M|XL|XXL|L)(.*)/i', '00236XL00', $arr, PREG_PATTERN_ORDER);
在这种情况下,它会返回L
我想要的大小。XL
如果我提供一个只有L
(例如 002465L00)的 ID,它工作正常。
你能告诉我我做错了什么吗?
我尝试将L
移到组的末尾,但没有帮助。
第一组 ,(.*)
是贪婪的,会尽可能匹配。由于如果第一组“接受” 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);