如何解决php与下划线精确匹配的字符串
我正在尝试对包含文本特定部分的字符串进行精确匹配。
例如字符串是:CAR_NW_BMW_X3_21_01_IMPORT_X_PREMIUM
字符串改变,但只有最后一部分; IMPORT_X_PREMIUM
所以它可能是 IMPORT_Y_PREMIUM
基于此,我想检查该部分是否存在于完整字符串中。
我尝试使用 preg_match 但这不起作用,我不是正则表达式专家,所以我可能犯了一个错误。
$str = "CAR_NW_BMW_X3_21_01_IMPORT_X_PREMIUM"
preg_match("~\bIMPORT_X_PREMIUM\b~",$str)
这是如何实现的?
解决方法
使用
preg_match("~(?<![^\W_])IMPORT_X_PREMIUM(?![^\W_])~",$str)
(?<![^\W_])...(?![^\W_])
是排除 _
的词边界。
还要考虑:
preg_match("~(?<=\b|_)IMPORT_X_PREMIUM(?=_|\b)~",$str)
见another regex proof。含义,可以是单词边界,也可以是下划线。
说明
--------------------------------------------------------------------------------
(?<! look behind to see if there is not:
--------------------------------------------------------------------------------
[^\W_] any character except: non-word
characters (all but a-z,A-Z,0-9,_),'_'
--------------------------------------------------------------------------------
) end of look-behind
--------------------------------------------------------------------------------
IMPORT_X_PREMIUM 'IMPORT_X_PREMIUM'
--------------------------------------------------------------------------------
(?! look ahead to see if there is not:
--------------------------------------------------------------------------------
[^\W_] any character except: non-word
characters (all but a-z,'_'
--------------------------------------------------------------------------------
) end of look-ahead
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。