source

구분 기호는 영숫자 또는 백슬래시 및 preg_match일 수 없습니다.

bestscript 2023. 1. 15. 17:27

구분 기호는 영숫자 또는 백슬래시 및 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 

원래 코드 예시와 관련이 없는 것 같습니다만, 「Delimiter는 영숫자 또는 백슬래시가 아니어야 합니다」라고 하는 에러가 표시되고, 여기서 구글이 표시됩니다.이유:preg_match 파라미터의 순서를 혼재시켰습니다.패턴은 두 번째 파라미터이고 일치하는 문자열은 첫 번째 파라미터입니다.주의:)

이걸로 시험해 보세요

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

언급URL : https://stackoverflow.com/questions/7660545/delimiter-must-not-be-alphanumeric-or-backslash-and-preg-match