구분 기호는 영숫자 또는 백슬래시 및 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영숫자를 구분 기호로 사용할 수 없다고 불평합니다.

(예를 들어) 패스하고 싶은 경우i대소문자를 구분하여 일치하는 것을 나타내려면 문자열 안쪽에 전달하고 regex 딜리미터를 벗어납니다.

'/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