>我有一个字符串,我需要在文本之间获取文本
场景
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));
}