이 코드가 있습니다.
$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/";