>백엔드 개발 >PHP 튜토리얼 >정규식 일치에 특수 문자가 포함되어 있습니다.

정규식 일치에 특수 문자가 포함되어 있습니다.

WBOY
WBOY원래의
2016-08-04 09:19:401601검색

<code>    $info = array(
        "https://segmentfault.com/q/1010000003711515",
        "http://www.baidu.com?admin.php&jasdhjas=asjd",
        'php $a=0; echo "abc";',
        "假如这是第三个....*^%$#@!()[]{}",
        );
    foreach ($info as $key => $value) {
        $message = "https://segmentfault.com/q/1010000003711515";
        $preg = "/^".$value."$/";
        if (preg_match($preg, $message)) {
            echo '匹配成功';
            break;
        }
    }</code>

$info 배열을 순회하고 각 문자열 앞뒤에 /^을 추가하며 $/는 제공된 $message과 일치하는 정규식이 되지만 $info 내부의 문자열 때문에 특수 문자가 있을 수 있습니다. 오류가 발생하므로 $info의 각 문자열을 이스케이프 처리할 수 있는 방법이 있나요?

을 정의할 때만 $info을 이스케이프할 수 있나요?

답글 내용:

<code>    $info = array(
        "https://segmentfault.com/q/1010000003711515",
        "http://www.baidu.com?admin.php&jasdhjas=asjd",
        'php $a=0; echo "abc";',
        "假如这是第三个....*^%$#@!()[]{}",
        );
    foreach ($info as $key => $value) {
        $message = "https://segmentfault.com/q/1010000003711515";
        $preg = "/^".$value."$/";
        if (preg_match($preg, $message)) {
            echo '匹配成功';
            break;
        }
    }</code>

$info 배열을 순회하고 각 문자열 앞뒤에 /^을 추가하며 $/는 제공된 $message과 일치하는 정규식이 되지만 $info 내부의 문자열 때문에 특수 문자가 있을 수 있습니다. 오류가 발생하므로 $info의 각 문자열을 이스케이프 처리할 수 있는 방법이 있나요?

을 정의할 때만 $info을 이스케이프할 수 있나요?

/은 정규 표현식에서 특별한 의미를 가지므로, 뒤에 나오는 '/'를 사용하려면 앞에 백슬래시 를 추가해야 합니다.

$preg가 정의되었지만 $info가 사용되었습니다.
또한 일반 와일드카드는 로 이스케이프해야 합니다.
위의 예는

으로 다시 작성해야 합니다.
<code>$preg = "/^https:\/\/segmentfault\.com\/q\/1010000003711515$/";
    $test = "https://segmentfault.com/q/1010000003711515";
    preg_match($preg, $test);</code>

그냥 하고 싶은 말을 하는 게 더 나은 것 같아요. 생각이 잘못된 것 같아요.
$preg는 알 수 없는 변수입니다
전제가 너무 큽니다

이러한 표현을 프로그래머가 입력했다면 그건 프로그래머의 문제입니다.

사용자가 이러한 표현식을 입력하는 경우 사용자는 주의를 기울일 수 있도록 입력 인터페이스에서 정규 표현식임을 알려야 합니다.

js를 사용하여 정규 표현식의 특수 문자를 이스케이프할 수 있지만 두 번의 이스케이프가 발생할 수 있습니다(예를 들어 사용자가 원래 이스케이프된 콘텐츠 http:|b4831e42daf1db770cdbc01d41578e020|/를 입력했습니다.)

<code>document.getElementById('test').value = (new RegExp(document.getElementById('test').value)).toString();</code>

또한, 프로그램에 /^, $/를 강제로 추가하는 경우에도 문제가 발생할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.