我正在尝试解析具有多个大小缩写的产品名称.例如,媒介可以
m, medium, med
我试过一个简单的
preg_match('/m|medium|med/i',$prod_name,$matches);
这适用于’product m xyz’.然而,当我尝试’产品s / m abc’时,我得到了一个假阳性的比赛.
我也试过了
preg_match('/\bm\b|\bmedium\b|\bmed\b/i',$prod_name,$matches);
强迫它在单词中找到,但是s / m中的m仍然匹配.我假设这是由于引擎将名称中的’/’视为单词分隔符?
总而言之,我需要在字符串中匹配’m’,而不是’s / m’或’small’等等.任何帮助都是值得赞赏的.
解决方法:
%\b(?<![/-])(m|med|medium)(?![/-])\b%
您可以使用负向lookbehind或lookahead来排除有问题的分隔符.这意味着“m”/“med”/“medium”这是它自己的单词,但不是斜线或短划线之前或后面.它也适用于字符串的开头和结尾,因为负前瞻/后观不会强制存在匹配字符.
如果您只想分隔空格,可以使用正面版本:
%\b(?<=\s|^)(m|med|medium)(?=\s|$)\b%
(“m”/“med”/“medium”,前面是空格或字符串的开头,后跟空格或字符串的结尾)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。