2012-09-29 14 views
5

Sto analizzando un documento e desidero dividerlo utilizzando preg_split() di php.Regex per la stringa tra due di un simbolo ma non tre di quello simbolo

Il documento è organizzato in sezioni con le intestazioni di:

==Section Title== 

Il problema è che ogni sezione ha sottosezioni con titoli di:

===Subsection Title=== 

domanda: C'è un modo per utilizzare regex per analizzare il documento per le cose che sono tra due segni uguali ma non tra tre segni uguali?

Grazie!

P.S. Sto cercando di imparare regex, ma trovo ancora abbastanza confuso!

risposta

6

Qui è uno che dovrebbe funzionare:

(?<!=)==(?!=)(.*)(?<!=)==(?!=) 

Come funziona:

Il modello (?<!=)==(?!=) appare due volte (all'inizio e alla fine). Corrisponde a due segni uguali che non sono preceduti o seguiti da un altro segno di uguale utilizzando (?<!=) (negativo lookbehind) e (?!=) (negativo lookahead). Lo scopo di questo è garantire che non si accidentalmente corrispondano due segni di uguale che fanno parte di un gruppo più grande come ===.

Lo (.*) nel mezzo corrisponde a qualsiasi testo esistente tra le due coppie di ==.

+0

Penso che è necessario '^' e '' $ intorno ad esso. Altrimenti, corrisponderà semplicemente alla parte della seconda riga dal secondo carattere (. * Trarrà il primo dei 3 '=' caratteri sulla destra). – Barmar

+0

Grazie !!! Ho dovuto sfuggire al = in aspetto negativo, ma dopo sembra funzionare. – OneThreeSeven

+0

@Barmar: molto vero, ho rielaborato la regex in modo che non abbia questo problema. Grazie per averlo notato. – Jon

3

Non sono sicuro che tu sia solo preoccupato per quei titoli, o per analizzare tutte le WikiCreole, ma sono disponibili librerie per analizzare WikiCreole in PHP.

http://wiki.wikicreole.org/Libraries

+0

è divertente come sai cosa sto cercando di fare =) – OneThreeSeven

+0

Puoi mostrare un esempio di come lo faresti con una libreria? –

+0

@ BenLee, mi dispiace, ma non posso. Non l'ho mai usato da solo. – Brad

1

Supponendo non c'è alcun spazio bianco ad inizio/fine della riga:

^==[^=]+==$ 
+0

Assicurati di specificare anche la modalità multilinea: ''/^== [^ =] + ==/m'' –

Problemi correlati