코드는 다음과 같습니다.
$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