2012-04-30 4 views
0

데이터베이스에 삽입 할 전체 파일 경로와 이름의 세그먼트를 추출 할 수 있어야합니다. 이렇게하려면 PHP에서 preg_match를 사용하고 있습니다. 또한 각 세그먼트에 패턴의 이름을 지정하여 일치하는 배열을 연관 배열로 만듭니다.PHP preg_match : 문자열을 제외한 모든 것을 일치 시키십시오.

$subject = 'c:/files/uk/kent/ashford/12345_Joe_Blogs_20120202120000.pdf'; 
    $pattern = '/[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/'; 
    preg_match($pattern, $subject, $matches); 
    foreach($matches as $key => $match) 
    { 
     if(is_numeric($key)) 
      unset($matches[$key]); 
    } 
    print_r($matches); 

작성 :

Array 
    (
     [country] => files/uk 
     [county] => kent 
     [town] => ashford 
     [id] => 12345 
     [first_name] => Joe 
     [last_name] => Blogs 
     [datetime] => 20120202120000 
     [file_extension] => pdf 
    ) 

내 문제는 그 나라 내가 원하는 일을 앞의 모든 폴더를 포함 다음은 예입니다. 나는 'uk'부분만을 원하고 'files/uk'는 원하지 않는다. 그래서 나는 '/'또는 '\'를 제외한 모든 것을 매치하는 법을 알아야합니다. 'c :/files'는 컨피규레이션에서 미리 설정되어있는 어떤 것도 될 수 있으므로 그 또는 다른 PHP 변수를 패턴에 포함하고 싶지는 않습니다.

Google에서 이와 비슷하게 보았지만 원하는 답변을 찾을 수없는 것 같습니다.

미리 도움을 청하십시오.

답변

0

까다로운 Regex를 수정하지 않으려면 기존 코드를 유지하고 basename 기능을 사용하는 것이 좋습니다.

이 시도 :

echo basename($matches['country']); 
//outputs "uk" 
0

변경 정규식에 :

$pattern = '/[\/\\\\](?<folder>.*)[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/'; 

그런 다음 당신은 당신이 사용하거나 나중에 삭제할 수 있습니다 배열의 폴더 회원을 보유하고 있습니다.

0

당신 수수이 시도 :

$pattern = '/[\/\\\\](.*)[\/\\\\](?<country>.*)[\/\\\\](?<county>.*)[\/\\\\](?<town>.*)[\/\\\\](?<id>.*)_(?<first_name>.*)_(?<last_name>.*)_(?<datetime>.*)\.(?<file_extension>pdf)/'; 

의 작업 사랑을 ..! :)

0

것은 당신이 할과 일치하지 않는 것에 대해 더 구체적인 것을 시도 :

'%(?x) 
[/\\\\](?P<country>[^_./\\\\]+) 
[/\\\\](?P<county>[^_./\\\\]+) 
[/\\\\](?P<town>[^_/\\\\]+) 
[/\\\\](?P<id>[^_./\\\\]+) 
_(?P<first_name>[^_./\\\\]+) 
_(?P<last_name>[^_./\\\\]+) 
_(?P<datetime>[^_./\\\\]+) 
\.(?P<file_extension>pdf) 
%' 

을 나는 당신이 하나 이상의 디렉토리가 어떤 그룹에 표시 할 적이 있으리라 믿고있어, 및 디렉토리 그/파일 이름에는 명시 적으로 일치하는 것 이외의 밑줄이나 마침표가 포함되지 않습니다.

관련 문제