2009-06-29 2 views
0

나는 루비를 모른다. 루비에 의해 생성 된 다음 정규 표현식 (즉, http://www.a-k-r.org/abnf/에 의해 주어진 rfc1738 문법에 따라 실행)을 사용하려고합니다. PHP에서는 일치하지 않지만 루비에서는 성공적으로 일치합니다. 아무도이 차이를 설명 할 수있는 정규식의 PHP와 루비의 처리 사이의 차이점을 볼 수 있습니까?루비에서 일하는 정규식은 PHP가 아닙니다. 그 원인은 무엇일까?

 
http:\/\/(?:(?:(?:(?:[0-9a-z]|[0-9a-z](?:[\x2d0-9a-z]?)*[0-9a-z])\x2e)?)*(?:[a-z]|[a-z](?:[\x2d0-9a-z]?)*[0-9a-z])|\d+\x2e\d+\x2e\d+\x2e\d+)(?::\d+)?(?:\/(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*(?:(?:\/(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*)?)*(?:\x3f(?:(?:[!\x24'-\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*)?)?/i 

하면 이후 모든 사랑 정규 표현식에 너무 많은 어떻게 다른 솔루션에 대해. rfc에 ABNF가 주어지면 임의의 문자열이 문법에 있는지 확인하는 방법 (PHP에서)이 필요합니다.

APG

VTC

F REE,

내가 임의의 다른 도구를 발견하지 않았습니다 아니라, 64 비트 시스템에서 컴파일되지 않습니다. 나는 또한 정규 표현식을 사용하지 않기를 바랄 것이다. 그러나 그것은 내가 성공한 가장 가까운 것이다.

+1

Ruby에서 reg-ex를 호출하는 방법과 PHP에서 호출하는 방법을 보여주는 코드 샘플을 게시하고 싶을 것이다. 대부분의 PHP reg-ex 문제는 문자열 이스케이프로 이어집니다. 즉 PHP에서 문자열을 pcre 함수에 전달합니다. 문자열이 reg-ex 엔진으로 들어가기 전에 적용되었으므로, 자주 지나가고 있다고 생각하는 reg-ex는 실제 것이 아닙니다. (PCRE (preg_) vs (ereg_)의 문제도 있습니다.) 당신은 아마도 preg. –

+5

을 원할 것입니다. 어떤 사람들은 문제에 직면했을 때 "알고 있습니다, 정규식을 사용할 것입니다."이제 그들은 두 가지 문제가 있습니다. – Chuck

+1

정규 표현식을 만들 때 인간보다 더 나쁜 것은 컴퓨터입니다 – karim79

답변

1

당신이 PHP에서 사용하려고 한 코드의 샘플을 볼 수 있지만, 다음을 시도 것이 좋을 것이다 (당신의 입력 변수에 $ _SERVER를 [ "HTTP_REFERER"] 변경해야합니다) :

if (preg_match('#http://(?:(?:(?:(?:[0-9a-z]|[0-9a-z](?:[\\x2d0-9a-z]?)*[0-9a-z])\\x2e)?)*(?:[a-z]|[a-z](?:[\\x2d0-9a-z]?)*[0-9a-z])|\\d+\\x2e\\d+\\x2e\\d+\\x2e\\d+)(?::\\d+)?(?:/(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*(?:(?:/(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*)?)*(?:\\x3f(?:(?:[!\\x24\'-\\x2e0-9_a-z]|%[0-9a-f][0-9a-f]|[&:;[email protected]])?)*)?)?#i', $_SERVER["HTTP_REFERER"], $l_Results)) { 
    $result = $l_Results[1]; 
} else { 
    $result = ""; 
} 
+0

아쉽게도 $ _SERVER [ "HTTP_REFERER"]가 'http://us2.php.net/'인 경우 결과가 없습니다. –

+1

나는 그것을 기대하지 않을 것이다 - 정규 표현식은 http : //가 처음부터 필요하다. 아마도 당신은 달성하려는 것을 더 잘 설명 할 수 있습니다. 코멘트에서 자동 링크 테스트; – Templar

+0

; 나는이 시간을 작성한 http : http://us2.php.net/ –