[php] 구분 기호는 영숫자 또는 백 슬래시 및 preg_match가 아니어야합니다.

이 코드가 있습니다.

$string1 = "My name is 'Kate' and im fine";
$pattern = "My name is '(.*)' and im fine";
preg_match($pattern , $string1, $matches);
echo $matches[1];

메신저가 실행되면 다음 오류가 반환됩니다.

경고 : preg_match () [function.preg-match] : 구분 기호는 영숫자 또는 백 슬래시가 아니어야합니다.



답변

패턴에 대한 구분자가 필요합니다. 다음과 같이 패턴의 시작과 끝에 추가해야합니다.

$pattern = "/My name is '(.*)' and im fine/";  // With / as a delimeter 


답변

해결책 (다른 답변에서 언급하지 않은 것-적어도 내가 처음 작성했을 때)은 PHP가 구분 기호를 참조 할 때 코드에서 볼 수있는 구분 기호 (따옴표)를 참조하지 않고 다음 문자열 내부의 문자. (사실 나는 이것이 어떤 문서에서도 언급 된 것을 본 적이 없습니다. 예제에서 봐야합니다.) 따라서 다른 많은 언어에서 익숙한 것과 같은 정규식 구문을 사용하는 대신 :

/something/

PHP는 문자열을 사용한 다음 문자열 내부에서 다른 구분 기호 를 찾습니다 .

'/something/'

PHP가 참조하는 구분 기호는 /문자 쌍이 아닌 '문자 쌍입니다 . 따라서를 작성 'something'하면 PHP는 s의도 된 구분자로 사용되며 구분자로 영숫자 문자를 사용할 수 없다고 불평합니다.

따라서 (예를 들어) an i을 전달하여 대 / 소문자 구분없는 일치를 원한다는 것을 표시하려면 문자열 내부에 전달하지만 정규식 구분 기호 외부에 전달합니다.

'/something/i'

/구분 기호가 아닌 다른 것을 사용하려는 경우 URL과 일치하고 모든 슬래시를 이스케이프 할 필요가없는 경우와 같이 할 수 있습니다.

'~something~'


답변

식에 대한 구분 기호를 지정해야합니다. 구분 기호는 표현식의 시작과 끝에 사용되는 특수 문자로 표현식이 어느 부분인지를 나타냅니다. 이를 통해 수식어와 인터프리터를 사용하여 표현식과 수식어를 알 수 있습니다. 오류 메시지에서 알 수 있듯이 백 슬래시는 이스케이프 문자이므로 구분 기호는 백 슬래시가 될 수 없습니다.

$pattern = "/My name is '(.*)' and im fine/";

동일한 예제 아래에 있지만 i대소 문자를 구분하지 않고 일치 하는 수정자가 있습니다.

$pattern = "/My name is '(.*)' and im fine/i";

보시다시피,는 i슬래시 밖에 있으므로 수정 자로 해석됩니다.

또한 슬래시 문자 (/)를 구분 기호로 사용하는 경우 정규식에서 /를 추가로 사용하는 경우 이스케이프해야합니다 (있는 경우).


답변

패턴에는 구분 기호가 있어야합니다. 구분 기호는 슬래시 (/) 또는 영숫자가 아닌 문자 (#, $, *, …) 일 수 있습니다. 예

$pattern = "/My name is '(.*)' and im fine/";
$pattern = "#My name is '(.*)' and im fine#";
$pattern = "@My name is '(.*)' and im fine@";


답변

자동 구분 기호 가있는 T-Regx 라이브러리 를 사용할 수도 있습니다.

$matches = pattern("My name is '(.*)' and im fine")->match($string1)->all();

                 // ↑ No delimiters needed 


답변

원래 코드 예제와 관련이 없을 수도 있지만 “구분자는 영숫자 또는 백 슬래시가 아니어야합니다.”라는 오류가 표시되고 여기에서 Google 표시를했습니다. 이유 : preg_match에 대한 매개 변수 순서를 혼합했습니다. 패턴이 두 번째 매개 변수이고 일치 할 문자열이 첫 번째입니다. 조심해 🙂


답변

이것으로 시도하십시오

 $pattern = "/My name is '\(.*\)' and im fine/";