2012-05-23 4 views
1

JSPHP에서 구분 기호를 제외하고 정규 표현식을 사용하여 구분 한 쌍간에 콘텐츠를 선택 가장 좋은 방법은 무엇입니까?일부 문자 래핑되는 문자열을 추출

aassssd [dddd] fff ffff (delimiter=[..]) output -> dddd 
aassssd QddddQ fff ffff (delimiter=Q)  output -> dddd 
aassssd RddddQ fff ffff (delimiters=R...Q) output -> dddd 
aassssd "dddd" fff ffff (delimiter=")  output -> dddd 

우려 전체를 선택하면 비교적 쉽게, 구분 기호를 제외에 관한 것입니다 :

/\"[^"]\"/ //for line four 

그것은 솔루션 스케일러를 반환하는 것이 바람직합니다.

$str = 'aassssd QddddQ fff ffff'; 
preg_match_all('/[Q](.*?)[Q]/', $str, $out, PREG_PATTERN_ORDER); 
var_dump($out); 

가 생산 :

Array 
(
    [0] => Array 
     (
      [0] => QddddQ 
     ) 

    [1] => Array 
     (
      [0] => dddd 
     ) 

) 

당신에게 이상적인 대답은 내가 마지막 구분자 개까지 모든 것을 캡처 비 욕심 .*?을 사용 http://regexpal.com/

+0

당신이 어떻게 하시겠습니까있는 정규식을 사용하고 계십니까? 정규식이 느립니다. – MaxArt

+2

Regex가 느린가요? 무엇에 비해? – kalisjoshua

+0

delimeter를 어떻게 결정합니까? 항상 구분 기호, 텍스트, 구분 기호 및 나머지 문자열이 오는 문자 그대로 "aassssd"입니까? 아니면 지정된 집합 중 하나입니까? 아니면 다른 패턴입니까? – IBBoard

답변

0
aassssd [dddd] fff ffff (delimiter=[..]) output -> dddd 

정규식 : JS에 대한

(?<=\[).*?(?=\]) 

정규식 (PHP의 작품도) :

[^\[]*?(?=\]) 
1

테스트 할 수 정규식을 사용 [] 구분 기호를 이스케이프 처리해야합니다. /[\[](.*?)[\]]/

이것은 단일 캡처 그룹 (.*?)을 사용하므로 필요한 출력은 출력 배열의 위치 1에 있습니다. PHP에 대한

+0

감사합니다. "# (? <= Q) [^ Q] * (? = Q) #s"? , 그것에 대해 무엇이 잘못 되었습니까? – PHPst