2011-02-25 1 views
0

I는 다음과 같습니다 텍스트가 : 나는 모든 코드를 (대체 할코드를 교체 preg_replace이다 사용하지만 코러스와 다리

[Verse 1] 
[B]This is a song with chords [D]and lyrics 
Blah [Am7+9d]blah blah [C]blah blah 

[Verse 2] 
This [C]is the verse 
This is the [G]verse 

[Chorus] 
This is [E#]the Chorus 
This is the Chorus 

[Bridge] 
This is [F]the bridge 
This is [Am]the bridge 

를 [A], [암], [A #], [ B], [C] 등)에서 가사를 보여줄 수 있습니다. 그들은 내가 아직 어떻게해야합니까 C와 B

로 시작하기 때문에

$line = preg_replace('~\[([A-G].*?)\]~', '', $line); 

이 지사를 작동하지만 그것은 [코러스]을 제거하고 [브리지] : 여기

내 현재 거의 작동 코드 그것은 완벽하게 작동하지만 [코러스]와 [브릿지]를 제거하지 않습니까?

답변

4

$line = preg_replace('~\[(?!Chorus|Bridge)[A-G].*?\]~', '', $line);

+1

[코러스] 등의 발생의 경우 케이스를 무시하는 것이 합리적 일 수 있습니다 [.? (?! 코러스 | * 다리) [AG] \] $ 선 = preg_replace이다 ('~ \ ~ 내가 ',' ', $ line); –

+0

Am7 또는 F # 또는 Asus7 또는 Am7 + 9d는 어떨까요? –

0

다른 (그리고 더 일반적인) 솔루션이 제공하는 텍스트 스 니펫 (snippet)에서 파생 된 데이터에 대한 가정을 기반으로.

if (preg_match("/^\[[^\[\]]*\]$/", $line) === 0) 
    $line = preg_replace("/\[.*\]/", "", $line); 
관련 문제