返回正则表达式的非匹配部分

时间:2016-09-26 14:49:55

标签: php regex

我目前正试图格式化品牌名称的某些部分,但我仍然坚持要获得我需要格式化的部分,例如:

BrandTest®
BrandBottle®
BrandJuice®

我希望在Brand®之间有部分。

我目前尝试过类似:/(?=(Brand))+(.*)+(®)/

的内容

但除了中间部分,我得到了所有东西。

3 个答案:

答案 0 :(得分:1)

您可以更改正则表达式以使用此功能:

Brand(.*?)®

<强> Working demo

Php代码

$re = "/Brand(.*?)®/"; 
$str = "BrandTest® BrandBottle® BrandJuice®"; 

preg_match_all($re, $str, $matches);

答案 1 :(得分:0)

也许是这样的:

<?php
$brands = 'BrandTest® BrandBottle® BrandJuice®';
$brands = explode('Brand', $brands);
//you will get each brand in an array as:
//"Test®", "Bottle®", "Juice®"
?>

如果您不想®,那么这可能会有所帮助https://stackoverflow.com/a/9826656/4977144

答案 2 :(得分:0)

将其汇总到方法中并返回结果:

function getQueryPiece($queryString) {
    preg_match('/\?\=Brand(.*)®/',$queryString,$matches);
    return $matches[1];
}

getQueryPiece("?=BrandBottle®"); // string(6) Bottle  
getQueryPiece("?=BrandTest®"); // string(4) Test  
getQueryPiece("?=BrandJuice®"); // string(5) Juice  

这只定义了一个捕获组(?=Brand®之间的字符串片段)。如果你还需要捕获其他部分,只需将每个部分包裹在parens中:'/(\?\=Brand)(.*)(®)/'但是这会改变$matches数组中该部分的位置。这将是第2位。

我相信你的模式中的最初问题是使用&#39;?&#39;转义。问号在正则表达式中具有特殊含义。这是一个很好的写作:Regex question mark