2012-07-08 3 views
1

나는 $$\[\] 사이에 모든 것을 캡처해야 다음 정규식PHP 정규식 preg_split - 가장 큰 그룹으로 분할은

((\$|(\\\[)).*?(\$|(\\\]))) 

하고 난 http://gskinner.com/RegExr/에 그것을 테스트하고 그것은 작동하고.

PHP의 변형 (배 백 슬래시)

((\$|(\\\\\[)).*?(\$|(\\\\\]))) 

내가 그 정규식에 따라 내 텍스트를 분할하고 싶습니다. 이 작은 것들이 아니라 첫 번째 (그리고 가장 큰 그룹)을 어떻게 사용하는지 말할 수 있습니까?

preg_split('/((\$|(\\\\\[)).*?(\$|(\\\\\])))/', $text, -1, PREG_SPLIT_DELIM_CAPTURE); 

그래서 텍스트 This is my $test$ for something. 내가 배열

[0] => This is my 
[1] => $test$ 
[2] => for something. 

을 받아야하지만

[0] => This is my 
[1] => $test$ 
[2] => $ 
[3] => 
[4] => $ 
[5] => for something. 

답변

2

당신은이 같은 필요 얻을 :

$text = 'This is my $test$ for \[something\] new!'; 
print_r(preg_split('/(\$.*?\$|\\\\\[.*?\\\\\])/', $text, -1, PREG_SPLIT_DELIM_CAPTURE)); 

출력 :

를,
Array 
(
    [0] => This is my 
    [1] => $test$ 
    [2] => for 
    [3] => \[something\] 
    [4] => new! 
) 

IMHO, 당신의 정규식 (아마도) 잘못된 것입니다. Hello $there\]과 같은 텍스트는 실패합니다.

  <-------------> Match text between \[ and \] 
/(\$.*?\$|\\\\\[.*?\\\\\])/ 
    <-----> Match text between dollars 
: 두 $들과 \[\] 한 쌍의 사이에 텍스트를 캡처해야하는 경우, 다음과 같은 정규 표현식이 필요합니다