PHP:使用strpos()只找到针

时间:2010-01-04 00:36:30

标签: php string find strpos

我正在使用strpos()在大海捞针中找到针。但是,我希望它只找到具有相同弦长的针。 E.g:

$mystring = '123/abc';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS FINE

$mystring = '123/abcdefghijk';
$findme   = 'abc';
$pos = strpos($mystring, $findme); // THIS IS NOT FINE

所以,我需要检查找到的字符串的字符串长度,并将其与针匹配,看它们是否长度相同。所以,123 / abc正确匹配abc,但我不希望123 / abcdefghijk匹配abc,因为它长于3个字符。

3 个答案:

答案 0 :(得分:1)

substr()可以使用negative3参数,该参数从字符串的末尾开始计算。因此,弄清楚针的长度,从末尾算出许多字符并将其与针比较:

if (substr($mystring, -strlen($findme)) == $findme) {
  ...
}

答案 1 :(得分:1)

问题非常模糊('123 / abc'显然也超过3个字符!),但您可能正在寻找带有负数索引的substr_compare()

答案 2 :(得分:0)

你是说斜线是重要的,即。你只想在一系列斜线分离的标记中使用针时匹配针?

如果是这样,你可以试试正则表达式:

preg_match('/(^|\/)abc($|\/)/', $mystring, $matches, PREG_OFFSET_CAPTURE);
$pos= FALSE;
if (count($matches)>=1)
    $pos= $matches[0][1];

或拆分斜杠并使用单独的字符串部分:

$parts= explode('/', $mystring);
$pos= array_search($parts, 'abc');
if ($pos!==FALSE)
    $pos= count(implode('/', array_slice($parts, 0, $pos)));

正则表达可能要快一点。但如果你需要匹配可能包含正则表达式特殊字符的任意斜杠分隔字符串,后者将是一个更好的举措。