PHP字符串按空格拆分,但NOT后空格不拆分的实现方法
问题:如何将字符串中"NOT"与其后续单词合并为整体拆分
现有字符串:$string = "wanted NOT IN OR",使用preg_match_all('/\w+/', $string, $WordArray)会将每个单词拆分为独立数组元素。需求是保留"NOT"与后续单词为一个整体,最终得到数组['wanted', 'NOT IN', 'OR'],尝试preg_split('/\s|\bNOT\s/')未达到预期效果,求正确实现方式。
解决方案
方法一:使用preg_match_all匹配目标模式
直接构造正则表达式,优先匹配NOT + 单词的组合,再匹配普通单词:
$string = "wanted NOT IN OR"; preg_match_all('/NOT \w+|\w+/', $string, $matches); $WordArray = $matches[0]; print_r($WordArray);
输出结果:
Array ( [0] => wanted [1] => NOT IN [2] => OR )
正则逻辑:NOT \w+会优先匹配"NOT"加空格加后续单词的组合,剩下的普通单词由\w+匹配,确保符合需求。
方法二:调整preg_split的正则规则
使用负向预查来跳过"NOT"后面的空格,只拆分其他位置的空格:
$string = "wanted NOT IN OR"; $WordArray = preg_split('/\s(?!NOT)/', $string); print_r($WordArray);
输出结果和方法一一致。
正则逻辑:\s(?!NOT)表示匹配后面不紧跟"NOT"的空格,也就是说,只有当空格之后不是"NOT"时才会触发拆分,这样"NOT"后面的空格会被保留,从而将"NOT IN"合并为一个元素。
内容的提问来源于stack exchange,提问作者ThomasK
相关产品推荐
相关产品推荐

