2011-01-19 10 views
9

मेरे पास डेटा का एक बहुत लंबा सरणी है, और मुझे इसके माध्यम से जल्दी से इसकी आवश्यकता है और सुनिश्चित करें कि नाम 22 वर्णों से अधिक नहीं हैं। मैं समझता हूँ कि मैं प्रदर्शन तरफ काटना सकता है, लेकिन मैं नहीं बल्कि सिर्फ उन्हें22 वर्णों से अधिक तारों के लिए regex करने का प्रयास

:) को हटाने की, एक उचित समाधान के साथ इस से निपटने के हैं यह यहां मेरी नमूना

$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'); 

है और regex है कि मैं अब तक के साथ आए हैं, जो सभी

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

पर काम करने के लिए मेरे योजना है कि मैं लाइनों को चिह्नित करने के regex का उपयोग कर सकते हैं और फिर मैं उन्हें अपने आईडीई के भीतर से नष्ट कर सकते हैं है प्रतीत नहीं होता। कोई प्रोग्रामिंग की अनुमति दी है;)

- संपादित करें -

सभी उत्तर के लिए धन्यवाद! इसके पीछे का विचार एक सपाट PHP फ़ाइल को केवल एक सरणी युक्त स्कैन करने के लिए एक त्वरित और स्वचालित तरीका था, यह देखने के लिए कि 22 से कम वर्णों वाले सभी नाम, उस नाम से अधिक लंबे समय तक लेआउट तोड़ देंगे, और मुझसे पूछा गया है उन्हें हटा दो। मैं बस अपने आईडीई में खोजना चाहता था और लाइनों को हटा देना चाहता था।

वर्णों को मिलान करना महत्वपूर्ण नहीं है, किसी भी वर्ण स्वीकार्य हैं, यहां तक ​​कि स्थान, \/~ और * आदि। मैं स्ट्रिंग की लंबाई से मेल खाने के लिए और अधिक देख रहा हूं लेकिन =>'$name' कंटेनर में निहित है।

+0

आप किस भाषा/ढांचे का उपयोग कर रहे हैं? निश्चित रूप से कुछ अंतर्निहित है जो आपको रेगेक्स का उपयोग किए बिना स्ट्रिंग की लंबाई का परीक्षण करने की अनुमति देगा? – LukeH

+0

@ ल्यूक: यह केवल स्ट्रिंग लम्बाई मुद्दा प्रतीत नहीं होता है। – SilentGhost

+0

यदि आप लंबाई के तार चाहते हैं तो '{20,40}' '=' 22 क्यों? –

उत्तर

18

से अधिक समय के लिए एक स्ट्रिंग से मेल खाएगी regex होगा:

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

यह एक 'नाम' है कि 23 अक्षर है के साथ किसी भी लाइन से मिलान करेगा या लंबा

+0

बिंगो! धन्यवाद, मैं इसे भविष्य के उपयोग के लिए कहीं और विशेष बचाऊंगा :) –

29

यह "कम से कम 22 कोई भी वर्ण"

.{22,} 
+0

तो जैसे ही फ़ाइल 22 वर्ण लंबी या लंबी हो जाती है, तो यह पूरी फ़ाइल से मेल खाएगा ... – Lazarus

+4

क्यों? क्या आपने यह कोशिश की? यह लाइन-बाय-लाइन – vmg

+2

+1 से मेल खाना चाहिए लाजर के समाधान के विपरीत, यह ठीक काम करता है। – mrt

2

मैं अच्छा ol 'strlen का उपयोग कर का विरोध नहीं कर सकता से मेल खाएगी।

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

"कोई प्रोग्रामिंग अनुमत नहीं है" के अलावा ... – Lazarus

+0

मैं फ़ाइल को संसाधित नहीं कर रहा हूं, यह फ्लैट है। इसलिए PHP का उपयोग करके सरणी को पार्स करना संभव नहीं है।मैं भविष्य में एक समान तकनीक को लागू करने की अनुमति देने के लिए एक रेगेक्स समाधान की तलाश में हूं :) –

+0

रेगेक्स फ्यूशन – AmerllicA

-1

इस regex 22 वर्ण

/.{23,}/ 
+0

के बजाय बेहतर तरीका है, जैसे ही फ़ाइल 22 वर्ण लंबी या लंबी हो जाती है , तो यह पूरी फाइल से मेल खाएगा। – Lazarus

संबंधित मुद्दे