2011-11-29 5 views
0

"domain.com/file/"이 포함 된 문자열 이외의 모든 것을 일치시키는 정규식을 작성하려고합니다.문자열을 제외한 모든 것을 검사하는 정규식

그래서 URL이 주어지면 "domain.com/file/"이 포함되지 않도록하고 싶습니다.

나는 이것이 매우 쉽다는 것을 안다. 그러나 나는 정규 표현식에 멍청하다.

답변

0

그냥 사용하십시오! 정규식

$pattern = '#!domain\.com/file/#'; 
if(preg_match($pattern,$data)){ 

} 
+0

이것은'.htaccess' RewriteRule에서 작동하지만 '!'만으로는 정규 표현식에 아무런 의미가 없습니다. – mario

4

에서 NOT 연산자 대신 정규 표현식이에 대한 strstr를 사용할 수 있습니다. 이름이 잘못 지정되었지만 문자열을 찾지 못하면 false을 반환합니다. 문자열에 truthy 값이 있으므로 == 대신 ===을 사용해야합니다.

질문이 구체적이지 않은 경우를 제외하고는 정규식을 사용할 필요가 없습니다.

몇 가지를 검토 한 결과 strpos은 실제로 strstr보다 빠릅니다.이 기능을 사용하려면 == 대신 ===을 사용해야합니다. PHP는 워드 프로세서에서 strpos

예 :

$mystring = 'abc'; 
$findme = 'a'; 
$pos = strpos($mystring, $findme); 

// Note our use of ===. Simply == would not work as expected 
// because the position of 'a' was the 0th (first) character. 
if ($pos === false) { 
    echo "The string '$findme' was not found in the string '$mystring'"; 
} else { 
    echo "The string '$findme' was found in the string '$mystring'"; 
    echo " and exists at position $pos"; 
} 
+2

+1 적절한 경우 regexes에 대한 문자열 조작 – nickb

+0

이것은 정규 표현식보다 비용이 적기 때문에 더 좋은 방법입니다. –

+0

strstr 대신 stristr을 사용하여 보안을 강화해야합니다. – peterp

1

대소 문자를 구별 일치를 사용하여 예 :

if (stristr($input, 'domain.com/file/') === false) { 
    // not found. 
} 
0

또한 질문에 대답하려면, 당신은 그에 대한 (?!...) negative assertion을 사용할 수 있습니다 용도 :

if (preg_match("~(?!.*domain.com/file/)~", $string)) 

다른 비교와 결합하면이 의미가 있습니다. preg_match 결과를 모두 무효로하는 것이 더 합리적인 것입니다.

관련 문제