我目前正试图格式化品牌名称的某些部分,但我仍然坚持要获得我需要格式化的部分,例如:
BrandTest®
BrandBottle®
BrandJuice®
我希望在Brand
和®
之间有部分。
我目前尝试过类似:/(?=(Brand))+(.*)+(®)/
但除了中间部分,我得到了所有东西。
答案 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