2009-07-09 2 views
0

그래서 정규 표현식을 사용합니다. PHP로 할 필요가 있습니다. 감사. "xx"(항상 2 개의 소문자 알파벳 문자) 및 "a12"(아무거나 될 수 있지만 항상 .php가 됨)를 추출 할 수 있어야합니다.regex (php)를 통한 값 가져 오기 도움말

String: 
http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant 
+0

그냥 메모 - 응답의 몇 지금까지 갖고있는 것 같다 우연히 정규식에서 슬래시 또는 두 개를 빠져 나오는 것을 잊어 버렸기 때문에 어느 것이 든 당신에게 적합한 답변이라면 PHP가 그것을 알 수 있도록 두 번 확인하십시오. 그렇지 않으면 PHP가 알려지지 않은 수정 자 등에 대해 쓰레기를 던질 가능성이 있습니다. 건배! –

답변

1

그는 PHP 솔루션을 찾고뿐 아니라 PCRE는,이 같은 좀 더 포괄적 인 것 같아요 이후 :

$src = 'http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant'; 
preg_match('/([a-z]{2})\/([^\/]+)\.php/', $src, $matches); 
/* grab "xx" */ 
$first = $matches[1]; 
/* grab "a12" */ 
$second = $matches[2]; 
+0

도망 갔을 때 오류가 없었던 유일한 이유이기 때문에이 파일을 선택했습니다. 또한 some_directory \ /를 추가하여 유효한 일치 항목이 있는지 확인하는 것이 도움이된다는 사실을 발견했습니다. –

+0

전화하세요. 나는 xx/a12.php 조각에 대한 터널 비전을 가지고 나머지 문자열에 대해서도 생각하지 않았다. 물론 정규식을 작성하거나 수작업으로 검증을 할 수있다. if (strpos ($ src, 'http://foo.bar.com/some_directory/') === 0) { // regex stuff } else { // 오류 내용 } –

0
"([a-z]{2})\/([^/]+)\.php" 

는 일치를 캡처해야합니다. XX 그룹 1에있을 것, A12은 2 군

될 것이다
+0

당신은 ([a-z] {2}) \/([^ /] *) \를 의미합니다. php –

+1

당신은 천만에요. –

+0

필자는 끝에 * 대신에 +를 사용하는 것이 합리적이라고 생각합니다. 파일 이름이 확장 파일이 아닌 것을 보장하기 때문에 위조 데이터에 대한 추가 검사입니다. 어느 것이 든 효과가 있지만 추가 검증을받지 않을 이유가 없습니다. –

0

/([A-Z] {2})/([A-ZA-Z0-9 _-] +)

$string = http://foo.bar.com/some_directory/xx/a12.php?whatever=youwant 


$matches; 
preg_match("/([a-z]{2})/([a-zA-Z0-9_\-]+)", $string, $matches); 

$part_1 = $matches[1]; //xx 
$part_2 = $matches[2]; //a12 

행운!