PHP를 사용하면 문자열에 다양한 단어와 패턴이 있는지 테스트하려고하지만 특정 단어를 일치 시키려고 할 때 왜 이상한 행동을하는지 알 수 없습니다.preg_match가 리터럴 단어를 찾지 못하는 이유는 무엇입니까?
예 1 : 왜 다음 중 하나가 반환되지 않습니까?
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/(string)/i', $test, $matches);
$ "String"이라는 단어가 제목 문자열에 있어도 결과는 항상 위의 경우 0입니다.
예 2 : 그러나, 이제 내가 약간 다음에 내 정규식을 변경할 가정 해 봅시다 : $ 결과에 대한 하나의
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/st.+(ring)/i', $test, $matches);
위의 반환 값. 내가 "문자열"이라는 단어를 분리 된 부분으로 나눌 때처럼 나는 성냥을 얻을 수있다.
예 3 : 나는 약간이 예에서 정규 표현식을 수정할 때 다시 한번, 그것은 또한 제로 반환하지만 나는 이유는 확실하지 않다 :
$test = 'clen=a.length;for(i=0;i<clen;i++)b+=String.fromCharCode(a.charCodeAt(i)^2)';
$result = preg_match('/(tring)/i', $test, $matches);
문자 등의 순서에 일치하도록 시도 "tring"은 0을 반환하지만 "ring"에서 일치하는 경우 1을 반환합니다. 그러나 "tring"은 특별한 단어 나 예약어처럼 들리지 않습니다!
이 동작은 "document"및 "unescape"와 같은 다양한 단어에도 동일하며 많은 다른 단어가있을 것입니다.
정규 표현식 엔진이 일부 단어를 다르게 취급하고 있다고 가정합니다. 예약어 나 특수 문자가 어떤 식 으로든 사용 되었기 때문일 수 있지만 위의 동작에 대한 공식 설명을 찾을 수 없었기 때문입니다.
내가 정말로 분명한 것을 놓친다면 사과하고 누군가 내게 설명해 주시면 감사하겠습니다. 많은 감사.
당신 말이 맞습니다. 메모장에 피사체 문자열을 붙여 넣었을 때 이전에 볼 수 없었던 다양한 숨겨진 문자를 볼 수있었습니다. "String"이라는 단어가 "St? ring"으로 나타납니다. 그러므로 regex와 preg_match는 잘 동작합니다. 고마워! – user3109890