2010-01-04 6 views
0

건초 더미에서 바늘을 찾으려면 strpos()를 사용하고 있습니다. 하지만, 같은 문자열 길이의 바늘 만 찾고 싶습니다. 예컨대 :PHP : 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가 3 문자보다 훨씬 길기 때문에 abc와 일치 시키길 원하지 않습니다.

+3

바늘이 문자열의 * 끝 *에있는 경우에만 일치를 원한다고 말하는 것입니까? – TML

답변

1

substr()은 문자열의 끝에서부터 세 어서 음수 인 인수를 취할 수 있습니다. 그래서, 바늘의 길이를 알아내는 것을 해제 계산 끝에서 많은 문자를 바늘과 비교 :

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

이 문제는 매우 모호 ('123/ABC는'뿐만 아니라 명확 이상 3 자보다 !), 음수 인덱스가있는 substr_compare()을 찾고있을 수 있습니다.

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

정규식은 조금 더 빨리 아마. 그러나 후자는 정규식 특수 문자를 포함 할 수있는 임의의 슬래시로 구분 된 문자열을 일치시켜야하는 경우 더 나은 방법입니다.