2012-03-12 4 views
1

입력으로, 나는 다음을 말해봐 : 제외, 개별 키워드를 분리해서정규식 옵션이 아닌 정규식 그룹 일치

  1. 모든 쉼표 : 여기

    Tonic,Love,(Original,Mix),house,dance,ton!c 
    

    규칙은 내가 얻기 위해 노력하고 있습니다 # 2가 참일 때.

  2. 괄호 사이에는 쉼표가 적용되지 않습니다.
    • 모든 대괄호는 키워드를 하나의 키워드로 그룹화합니다.

지금은 다음과 같은 정규 표현식을 가지고 :

그것은 쉼표로 분리와 동일합니다
Tonic 
Love 
(Original 
Mix) 
house 
dance 

, I 제외 :

#([\(?.*?\)])|(.*?),# 

이 같은 결과를 얻을 마지막 키워드 ton!c을 잃어 버렸습니다. 나는이 모든 것이 하나의 정규식에서 일어나는 것을 요구하지 않지만, 선호된다.

+0

regexp의 마지막 쉼표를', | $'로 바꾸어 마지막 값을 잃지 않도록하십시오. – kirilloid

+0

# 2를 기준으로 한 단일 키워드 여야하므로 (Original, Mix) 분실하지 않았습니까? – Kash

답변

2

간단한 간단한 설명 : \([^\)]*\)|[^,]*가 작동합니다.

/,(?![^(]*\))/

또는 모든 일치 :

+0

이것은 (거의) 내가 필요로하는대로 정확하게 작동한다. 내가 바꾼 유일한 것은 마지막'''을'+'로하여 빈 일치를 제거하는 것입니다. –

1

당신은에 분할 할 수

/\([^)]*\)|[^,()]*/

적어도 당신의 예제.

즉 :

$array = preg_split('/,(?![^(]*\))/', $string); 
0

"(\([^)]+\))|([^(][^,]*)(,(\([^)]+\))|([^(][^,]*))*" 

보십시오이 한 번에 모든 그룹을 잡는다.