有些记录名称中混合了几种类型的SKU,可能包含符号、数字等。
示例:
Name of product 67304-4200-52-21
67304-4200-52 Name of product
67304-4200 Name of product
38927/6437 Name of product
BKK1MBM06-02 Name of product
BKK1MBM06 Name of product
我需要preg_match(PHP)只SKU部分与任何符号在任何组合。
所以我写了模式:
/\d+\/\d+|\d+-?\d+-?\d+-?\d+|\bbkk.*\b/i
它可以工作,但不适用于[BKK *] SKU。
是否可以将所有这些类型的SKU组合在一个模式中?
谢谢。
2条答案
按热度按时间3hvapo4f1#
模式
\d+-?\d+-?\d+-?\d+
意味着应该至少有4个数字,因为所有连字符都是可选的,但是在示例数据中,带有数字的部分至少有一个连字符,并且由2、3或4个部分组成。您可以将数字和连字符部分重复1次或更多次,并且不使用
.*\b
,而是使用\S*\b
来匹配可选的非空格字符,这些字符将回溯到最后一个单词边界。请注意,如果您在php中使用
/
以外的分隔符,则不必转义\/
使用不区分大小写的匹配:
\b
防止部分字匹配的字边界(?:
备选项的非捕获组\d+(?:-\d+)+
匹配1+位数,重复匹配-
1次或多次,然后再次匹配1+位数(或使用{1,3}
代替+
)|
或bkk\S*
匹配bkk
和可选的非空白字符|
或\d+\/\d+
匹配1+位数/
和1+位数)
关闭非捕获组\b
字边界参见regex101 demo。
rryofs0p2#
用途
参见regex proof。
REEX101解释