PHP如何使用正则表达式提取字符串中方括号外的文本
你目前使用的正则/\[[^\]]*\]/的匹配规则是捕获所有以[开头、]结尾、中间不包含]的内容,所以只会返回方括号内部的内容,和你要提取方括号外文本的需求刚好相反。
以下是两种可行的实现方案:
方法1:使用preg_split拆分字符串
该方案思路更简单,直接把所有[xxx]格式的内容作为分隔符切割原字符串,再过滤空值和首尾空白即可得到目标结果。
$text = " My [ground]name[test]Jhon[random]petor [shorts]."; // 以方括号包裹的内容为分隔符拆分字符串 $splitResult = preg_split("/\[[^\]]*\]/", $text); // 处理每一段的首尾空白,过滤空值后重置数组索引 $finalResult = array_values(array_filter(array_map('trim', $splitResult), function($val) { return $val !== ''; })); print_r($finalResult);
输出结果:
Array ( [0] => My [1] => name [2] => Jhon [3] => petor )
方法2:使用preg_match_all直接匹配
如果你更倾向于直接匹配的方式实现,可以用带前后断言的正则,直接捕获方括号外的文本段:
$text = " My [ground]name[test]Jhon[random]petor [shorts]."; preg_match_all("/(?<=^|\])[^\[]+(?=\[|$)/", $text, $matches); // 同样处理空白和空值 $finalResult = array_values(array_filter(array_map('trim', $matches[0]))); print_r($finalResult);
上述正则的逻辑是:匹配前面为字符串开头/右方括号、后面为左方括号/字符串结尾的所有非左方括号字符段,刚好对应方括号外的内容。
内容的提问来源于stack exchange,提问作者Bikash Ranjan Nayak
相关产品推荐
相关产品推荐

