如何在两个字符串之间获取字符串


How do i get string between two string

>我有一个字符串,我需要在文本之间获取文本

场景

SELECT * FROM EMP WHERE EMPID > 0

从上面的字符串中我需要得到

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

如果我给出$InputString、$StartStr和$EndStr,上面的函数就可以工作,但如果我没有通过$EndStr则不起作用

$hd_qa['SELECT'] = $this->BetweenStr($myQuery,'SELECT','FROM');
**Result => *
$hd_qa['FROM'] = $this->BetweenStr($myQuery,'FROM','WHERE');
**Result => EMP
$hd_qa['WHERE'] = $this->BetweenStr($myQuery,'WHERE','');
** NOT WORKING
$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];
如果你想

按照自己的方式做,这样做应该可以解决问题:

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