2013-10-06 3 views
1

두 개의 정보를 수집하는 문자열이 있습니다. 슬래시 앞의 모든 것은 검색 변수이고 이후의 모든 것은 페이지 번호입니다.PHP 문자열 pattem 이후 부분을 별도의 변수로 추출하는 방법

가정 다음

$search = "classic rock/8"

은 $ searchvalue되어야 [0] = "고전 $의 searchvalue [1] = '바위'다음 $ $ searchvalue [X] = 등등 ... 및 page = 8

나는 몇 가지 접근법을 시도했다. 마지막은 슬래시 이후의 모든 것을 먼저 제거하여 세 번 통과하는 것이다.

$search=substr($search, 0, strpos($search, '/'));

다음 배열에 $ 검색 값을 분리한다. 그런 다음 다시 돌아가서 (세 번째로!) 슬래시 앞에있는 모든 것을 삭제하여 페이지 변수를 가져옵니다.

저는 이것이 매우 비효율적이라는 것을 알고 있습니다. 한 번에이 작업을 수행 할 수있는 방법이 있습니까?

미리 감사드립니다.

+0

어쩌면 단순히 공간에 분할 다음 수를 얻을 수있는 마지막 인덱스 변수에 정규식을한다. – sln

답변

3

두 번 문자열을 폭발시킬 수 있으며 같은 결과가 나옵니다.

$res = explode("/", $search); 
$page = $res[1]; //This is the page 

$searchValues = explode(" ", $res[0]); //These are the results 
+0

+1 좋은 답변입니다. – sln

+0

네, 2 배가 3 배보다 낫지 만 한 번에 해보고 싶었습니다. 감사! – user2431427

1

당신은 strrpos를 사용할 수 있습니다

$search = 'classic rock/8'; 
$page = substr($search, strrpos($search, '/')+1); // 8 
+0

이것은 한 자리 페이지 변수에 유용 할 것입니다. "재즈/14"라면? 각 주제별로 몇 페이지가 있는지 모르겠습니다. – user2431427

+0

마지막 슬래시 뒤의 숫자에 상관없이 작동합니다. – anubhava

0

를 응답을 얻기에 한 번에, 당신은 레그 일치하는 모든 기능을 사용하거나
당신은 레그 분할 기능을 사용할 수 있습니다.

어느 쪽이든 그 단점이 있지만 너무 폭발하고 strrpos 또는 아무것도.

많은 사람들이 정확하게 조각을 사용하여 훨씬 더 세부적인 방법으로
을 정확하게 사용할 수 있다는 것을 인식하지 못합니다. 캡처를 포함하도록 세부 사항을 정의하여 정의 할 수 있습니다. 이 방법은 조금 다르지만, 어떻게하는지 배우면 큰 힘이 있습니다.

는 정규식 :

# ([^\s\/]+)(?:\s+|$)|\/+\s*(\d+)[\s\/]*$|\/.*$ 

         # Delim-1 
    ([^\s\/]+)  # (1), A group of not whitespace nor forward slash 
    (?: \s+ | $)  # folowed by whitespace or EOL 

         # Delim-2 
    | \/+ \s*   # Forward slashes folowed by whitespaces 
    (\d+)   # (2), folowed by a group of digits 
    [\s\/]* $   # followed by whitespaces or slashes until EOL 

         # Delim-3 
    | \/ .* $   # Forward slash folowed by anything until EOL 

PHP 코드 :

<?php 
$keywords = preg_split 
    ( 
     "/([^\s\/]+)(?:\s+|$)|\/+\s*(\d+)[\s\/]*$|\/.*$/", 
     "classic rock/8", 
     -1, 
     PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE 
    ); 
print_r($keywords); 
?> 

Result: 
Array 
(
    [0] => classic 
    [1] => rock 
    [2] => 8 
)