2016-03-18 18 views
-3

i tek bir dize var ve ben yukarıdakiNasıl iki dize arasındaki dize olsun

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)); 
} 

almak gerekir yukarıdaki dizesinden metin arasındaki metni

Senaryo

SELECT * FROM EMP WHERE EMPID > 0 

almak gerekir Eğer $ InputString, $ StartStr ve $ EndStr verirsem fonksiyon çalışır ama eğer EndStr $ 'ı geçmezsem işim çalışmıyor

+0

deneyin düzenli ifadeler güçlü, büyülü dünyasına okumak için. – Connum

+1

Dize sabit bir biçim mi olacak? Çünkü 'patla' bunu normal ifadelerden daha kolay yapar. – andrewsi

+0

no dinamik bir dize –

cevap

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

Eğer hile yapmak gerekir böyle yapıyor, bunu yolunuzu yapmak istiyorsanız:

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)); 
}