2016-09-26 2 views
0

ich currenty bin versucht, einige Teile eines Markenname zu formatieren, aber ich bin fest mit dem Teil bekommen, die ich formatieren müssen, zB:Return Nonmatching Teil Regex

BrandTest®
BrandBottle®
BrandJuice®

Ich hätte gerne die Teile zwischen Brand und ®.

Ich versuche noch so etwas wie: /(?=(Brand))+(.*)+(®)/

Aber ich bin immer alles außer dem Teil in der Mitte.

+0

Sie haben nicht gut verstanden, was ein Lookahead ist. –

Antwort

1

können Sie Ihre regex diese verwenden ändern:

Brand(.*?)® 

Working demo

Php Code

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

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

Vielleicht so:

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

Wenn Sie die ® nicht dann wollen könnte dies helfen https://stackoverflow.com/a/9826656/4977144

0

rollen sie in eine Methode und bringt Ihr Ergebnis:

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 

Dies definiert nur 1 Erfassungsgruppe (das Stück der Schnur zwischen ?=Brand und ®). Wenn Sie auch die anderen Teile erfassen müssen, wickeln Sie einfach jedes Teil in parens: '/(\?\=Brand)(.*)(®)/' Dies ändert jedoch die Position dieses Stücks im $matches Array. Es wäre Position 2.

Ich glaube, das erste Problem in Ihrem Muster ist das Ergebnis der Verwendung von "?" Unescaped. Fragezeichen haben in regulären Ausdrücken eine besondere Bedeutung. Hier ist eine gute Beschreibung dazu: Regex question mark