2016-03-18 12 views
-3

bekommen habe ich eine Saite und ich braucheWie kann ich Zeichenfolge zwischen zwei String

Szenario

SELECT * FROM EMP WHERE EMPID > 0 

von oben Zeichenfolge i

array([0]=>'*',[1]=>'EMP') 

function BetweenStr($InputString, $StartStr, $EndStr=0, $StartLoc=0) 
{ 
    if (($StartLoc = strpos($InputString, $StartStr, $StartLoc)) === false) { return; } 
    $StartLoc += strlen($StartStr); 
    if (!$EndStr) { $EndStr = $StartStr; } 
    if (!$EndLoc = strpos($InputString, $EndStr, $StartLoc)) { return; } 
    return substr($InputString, $StartLoc, ($EndLoc-$StartLoc)); 
} 

oben erhalten müssen, um Text zwischen Text zu erhalten funktioniert, wenn ich $ InputString, $ StartStr und $ EndStr gebe, aber wenn ich $ EndStr nicht übergeben habe, funktioniert es nicht

+0

versuchen in den mächtigen, magischen Welt der regulären Ausdrücke zu lesen. – Connum

+1

Wird die Zeichenfolge ein festes Format haben? Denn 'explode' macht das einfacher als reguläre Ausdrücke. – andrewsi

+0

nein, es ist eine dynamische Zeichenfolge –

Antwort

1
$matches = array(); 
$sql = 'SELECT blah blah blah FROM EMP WHERE EMPID > 0'; 
preg_match('/SELECT(.+?)FROM(.+?)WHERE(.+)/is', $sql, $matches); 
print_r($matches); 

echo $matches[1]; // These are what you're looking for 
echo $matches[2]; 
0

Wenn Sie es Ihren Weg zu tun, wie das zu tun sollte es tun:

function BetweenStr($InputString, $StartStr, $EndStr=0, $StartLoc=0) 
{ 
    if (($StartLoc = strpos($InputString, $StartStr, $StartLoc)) === false) { return; } 
    $StartLoc += strlen($StartStr); 
    if (!$EndStr) { $EndLoc = strlen($InputString); } 
    if (!$EndLoc = strpos($InputString, $EndStr, $StartLoc)) { return; } 
    return substr($InputString, $StartLoc, ($EndLoc-$StartLoc)); 
} 
Verwandte Themen