2011-01-19 27 views
9

Ho una lunga serie di dati e ho bisogno di sveltirli rapidamente e accertarmi che nessuno dei nomi abbia più di 22 caratteri. Capisco che ho potuto troncare sul lato del display, ma avrei preferito affrontare questo con una soluzione adeguata, di limitarsi a rimuovere :)Tentativo di regex per stringhe più lunghe di 22 caratteri

Questo è il mio campione

$profiles[257] = array('name'=>'FedupKissingFrogs', 'age'=>27, 'sex'=>'F', 'location'=>'XXXXXXXXXX'); 
$profiles[260] = array('name'=>'Lil_Greta_90', 'age'=>20, 'sex'=>'F', 'location'=>'XXXXXXXXXX'); 
$profiles[262] = array('name'=>'lOOkfOrme86', 'age'=>24, 'sex'=>'F', 'location'=>'XXXXXXXXXX'); 
$profiles[259] = array('name'=>'youvefoundME', 'age'=>21, 'sex'=>'F', 'location'=>'XXXXXXXXXX'); 

E qui è l'espressione regolare che sono venuto in mente finora, che non sembra funzionare affatto

'[A-Za-z]{20,40}' 

il mio piano è che posso usare l'espressione regolare per segnare le linee e poi li posso cancellare da dentro il mio IDE. Non v'è nessuna programmazione consentito;)

- Modifica -

Grazie per tutte le risposte! L'idea alla base di questo è stato un modo rapido e automatizzato per scansionare un file PHP piatto contenente un array per vedere se tutti i nomi con meno di 22 caratteri, come un nome più lungo di quello interromperà il layout, e mi è stato chiesto di rimuovili. Volevo solo cercare nel mio IDE e rimuovere le linee.

La corrispondenza dei caratteri non è importante in quanto tale, tutti i caratteri sono consentiti, anche lo spazio, \/~ e * ecc. Sto cercando più per abbinare la lunghezza della stringa ma contenuta nel contenitore =>'$name'.

+0

Che lingua/struttura stai usando? Sicuramente c'è qualcosa di built-in che ti permetterà di testare la lunghezza di una stringa senza ricorrere ad una regex? – LukeH

+0

@Luke: non sembra essere solo un problema di lunghezza della stringa. – SilentGhost

+0

Perché '{20,40}' se vuoi stringhe di lunghezza '<=' 22? –

risposta

18

La regex sarebbe:

/'name'=>'[^']{23,}?'/i 

Questo Restituirà tutte le linee con un 'nome', che è di 23 caratteri o più a lungo.

+0

Bingo! Grazie, salverò questo posto speciale per un uso futuro :) –

29

Ciò corrisponderà "Almeno 22 caratteri"

.{22,} 
+0

Quindi, non appena il file diventa lungo 22 caratteri o più, allora questo corrisponderà ... all'intero file. – Lazarus

+4

Perché? hai provato questo? Dovrebbe corrispondere linea per linea – vmg

+2

+1 contrariamente alla soluzione di Lazarus, questo funziona bene. – mrt

2

non ho potuto resistere utilizzando il buon vecchio' strlen.

foreach ($profiles as $id => $data) { 
    if (strlen($data['name']) >= 22) 
     unset($profiles[$id]); 
} 
+0

Diverso da "Non è consentita alcuna programmazione" ... – Lazarus

+0

Non sto elaborando il file, è piatto. Pertanto non è possibile analizzare l'array usando PHP.Sto cercando una soluzione regex per permettermi di applicare una tecnica simile in futuro :) –

+0

regex è un modo migliore invece di fucilazione – AmerllicA

-1

Questa regex corrisponde a una stringa più lunga di 22 caratteri

/.{23,}/ 
+0

Quindi, non appena il file ottiene 22 caratteri lunghi o più lunghi , quindi questo corrisponderà ... all'intero file. – Lazarus

Problemi correlati