두가 잘못된 결과를 제공합니다. (132 개) 조치를 취하고,
/Message Received[^"]+"\K[^\n]+(?=")/
(없음 캡처 그룹 :
올바르게 다음 패턴 중 하나를, 외부 따옴표 사이의 문자열을 추출 사용하려면 : 다른 아무도 그들이 할 수 있기 때문에 답변으로 효율적 게시되지 Demo)
/Message Received[^"]+"([^\n]+)"/
(캡처 그룹은 130 단계, Demo)
이 두 패턴이 부정 문자 클래스에 이르는 및 대상 문자열을 포함를 사용하여 최대의 정확성과 효율성을 제공됩니다. 첫 번째 패턴은 캡처 그룹 대신 \K
을 사용하여 preg_match_all()
의 출력 배열을 50 % 가량 줄입니다. 이러한 이유로 이러한 패턴 중 하나를 프로젝트에 사용해야합니다. 입력 문자열의 크기가 커질수록 내 패턴은 다른 게시 된 패턴에 비해 성능이 향상됩니다.
PHP 구현 :
$in
이 입력 문자열을 나타냅니다.
패턴 # 1 방법 :
var_export(preg_match_all('/Message Received[^"]+"\K[^\n]+(?=")/',$in,$out)?$out[0]:[]);
// notice the output array only has elements in the fullstring subarray [0]
출력 :
array (
0 => 'Hello. My name is John Smith',
1 => 'Hello. My name is "John Smith"',
)
패턴 # 2 방법 :
var_export(preg_match_all('/Message Received[^"]+"([^\n]+)"/',$in,$out)?$out[1]:[]);
// notice because a capture group is used, [0] subarray is ignored, [1] is used
출력 :
array (
0 => 'Hello. My name is John Smith',
1 => 'Hello. My name is "John Smith"',
)
,
두 가지 방법 모두 원하는 출력을 제공합니다.
Anirudha의 잘못된 패턴 : /(?<=Message Received)[^"]*(.*)(?=\s+Some standard text)/
(345 단계 + 캡처 그룹 +가 원하지 않는 외부 따옴표 포함)
조쉬 Crozier가의 패턴 : /Message Received.*?"([^\n]+)"/
(174 단계 + 캡처 그룹)
Sahil Gulati의 이 올바르지 않음 패턴 : /(?=Message Received)[^\"]+\K\"[\w\s\"\.]+\"/
(109 단계 + 원치 않는 외부 큰 따옴표 포함 + 패턴에서 문자를 불필요하게 이스케이프 처리 함)
큰 따옴표로 쓰여진 데이터를 추출 하시겠습니까? –