2016-03-18 18 views
-3

私は1つの文字列を持っていると私は上記は、どのように私は2つの文字列間の文字列を取得行う

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

を取得する必要があります上記の文字列からテキスト間のテキスト

シナリオ

SELECT * FROM EMP WHERE EMPID > 0 

を取得する必要があります私が$ InputString、$ StartStr、$ EndStrを与えても機能しますが、$ EndStrを渡さなかった場合は機能しません。

+0

てみ正規表現の強力な、魔法の世界に読み込まします。 – Connum

+1

文字列は固定形式になりますか? 'explode'はこれを正規表現よりも簡単に行うためです。 – andrewsi

+0

いいえその動的文字列 –

答えて

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

あなたがトリックを行う必要がありますそのようにやって、それをあなたの方法をしたい場合は:

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)); 
} 
関連する問題