2016-09-24 4 views
0

preg_split 슬래시 다음에 작은 따옴표로 묶은 문자열을 제외하는 방법은 무엇입니까?preg_split 슬래시 다음에 작은 따옴표로 묶인 문자열을 뒤 따르는 방법

저는이 문제를 꽤 많이 겪었습니다.

다음은 출력 코드입니다.

$str = "storeid='1,2',categoryname = 'the ultimate \'operating room'"; 

$match = preg_split("/('[^'\\\\]*')/U", $str, null, PREG_SPLIT_DELIM_CAPTURE); 

print_r($match); 

OUTPUT

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname = 'the ultimate \ [3] => 'operating room' [4] =>) 

그러나 여기가 내 예상 출력, 내가 제외 할 \ '.

누군가 나를 이해하고 도와 주길 바랍니다.

Array ([0] => storeid= [1] => '1,2' [2] => ,categoryname =[3] => 'the ultimate \'operating room' ) 

답변

0

작은 따옴표로 묶인 모든 것을 캡처하는 동안 에스 케이프 된 작은 따옴표에도주의해야합니다. 이 정규식 다음 :

  • ' 단일 인용

    '[^'\\\\]*(?:\\\\.[^'\\\\]*)*' 
    
    (개방)
  • ' 제외 [^'\\\\]* 모든 문자와
  • (?:\\\\.[^'\\\\]*)*\ 매치 가능한
  • 만큼 다음 같은 이전의 패턴을 존재하는 경우 이스케이프 문자
  • ' 작은 따옴표 (마감)

PHP :

$match = preg_split("/('[^'\\\\]*(?:\\\\.[^'\\\\]*)*')/", 
    $str, 
    -1, 
    PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY); 

출력 : 당신이 패턴은 어떤으로 중단됩니다 않는 경우

Array 
(
    [0] => storeid= 
    [1] => '1,\'2' 
    [2] => ,categoryname = 
    [3] => 'the ultimate \'operating room' 
) 
+0

는 작은 따옴표 아니다 (작은 따옴표 사이) 문자를 탈출했다. 이스케이프 처리 된 모든 항목을 처리하려면'(? : \\\\. [^ '\\\\] *))'(': \\\\ '[^'\\\\] 개행 문자를 포함한 문자. –

+0

나는 초기 정규 표현식을 내가 쓴 답을 믿는다. 나는 서술을 쓰는 동안 내가 무엇을 생각하고 있었는지 확신하지 못한다. 어쨌든 고마워. @CasimiretHippolyte – revo

관련 문제