2010-09-18 17 views

risposta

2

I [\s]{1} sequenze * che si sta utilizzando per abbinare sovrapposizione spazi tra le partite. Lo spazio finale dopo "AA " è lo stesso spazio precedente a " BB". Ogni singolo carattere può essere abbinato solo una volta, quindi dopo che la scansione trova " AA " cerca solo la rimanente stringa "BB " per una corrispondenza e non riesce a trovarne uno.

Provare invece la sequenza di fuga limite parola \b. Questo corrisponde l'inizio e la fine delle parole, ma in realtà non consuma alcun carattere, in modo che possa corrispondere più volte:

preg_match_all('/\b(AA|BB|CC)+\b/', 'AA BB', $matches); 

Utilizzando \b ha l'effetto bonus di non richiedere gli spazi aggiuntivi che hai avuto che circonda la stringa. Puoi passare in 'AA BB' invece di ' AA BB ' se lo desideri.

* A proposito, [\s]{1} è la stessa cosa di [\s], che è la stessa di un semplice \s. Non c'è bisogno di parentesi quadre o ricci.

+0

Un limite di parola sarà anche corrispondenza (ad es. 'AA; BB; CC', che potrebbe essere un falso positivo. – Matthew

0

Il problema è che si sta tentando di abbinare lo stesso spazio due volte. Utilizzando uno sguardo in avanti (? = \ S) dovrebbe aiutare:

preg_match_all('/\s(AA|BB|CC)(?=\s)/',' AA BB CC BB AA ',$matches); 
Problemi correlati