0

我正在使用 strpos() 来寻找大海捞针。但是,我希望它只找到具有相同字符串长度的针。例如:

$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 个字符长得多。

4

3 回答 3

1

substr()可以采用从字符串末尾开始计数的negative3 参数。所以算出针的长度,从末尾数出那么多字符并将其与针进行比较:

if (substr($mystring, -strlen($findme)) == $findme) {
  ...
}
于 2010-01-04T00:40:22.613 回答
1

这个问题很模糊('123/abc' 显然也比 3 个字符长!),但您可能正在寻找带有负索引的substr_compare() 。

于 2010-01-04T00:43:37.210 回答
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)));

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

于 2010-01-04T01:51:28.510 回答