2011-12-13 17 views
8

मैं एक स्ट्रिंग की शुरुआत में सभी रिक्त स्थानों (एक नियमित अभिव्यक्ति के भीतर) गिनना चाहता हूं।व्हाइटस्पेस शुरू करने की गणना

मेरे विचार:

$identSize = preg_match_all("/^()[^ ]/", $line, $matches); 

उदाहरण के लिए:

$example1 = " Foo"; // should return 1 
$example2 = " Bar"; // should return 2 
$example3 = " Foo bar"; // should return 3, not 4! 

किसी भी सुझाव, मैं इसे कैसे हल कर सकते हैं?

उत्तर

14
$identSize = strlen($line)-strlen(ltrim($line)); 

या, यदि आप नियमित अभिव्यक्ति चाहते हैं,

preg_match('/^(\s+)/',$line,$matches); 
$identSize = strlen($matches[1]); 
+1

पहला स्मार्ट है। मैं कल्पना कर सकता हूं कि यह preg_match संस्करण से तेज़ है। – Powertieke

+0

+1, लेकिन आपका पहला संस्करण केवल रिक्त स्थान पर ध्यान देता है, आप अन्य व्हाइटस्पेस वर्ण भी शामिल करना चाहेंगे। – codaddict

+0

@ कोडडिक्ट हालांकि ओपीएस प्रश्न रिक्त स्थान की गणना करना था, इसलिए यदि निर्दिष्ट नियमित अभिव्यक्ति के संबंध में कोई टिप्पणी की जाती है। –

1

आप लगातार खाली स्थान के लिए एक preg_match कर सकता है (तो यह है कि यह स्ट्रिंग रिटर्न का मिलान नहीं हुआ "") स्ट्रिंग की शुरुआत में।

फिर आप व्हाइटस्पेस वर्णों की संख्या को वापस करने के लिए मैच पर स्ट्रेलन का उपयोग कर सकते हैं।

9

नियमित अभिव्यक्ति (या किसी अन्य हैक) का उपयोग करने के बजाय आपको strspn का उपयोग करना चाहिए, जिसे इन प्रकार की समस्याओं को संभालने के लिए परिभाषित किया गया है।

$a = array (" Foo", " Bar", " Foo Bar"); 

foreach ($a as $s1) 
    echo strspn ($s1, ' ') . " <- '$s1'\n"; 

उत्पादन

1 <- ' Foo' 
2 <- ' Bar' 
3 <- ' Foo Bar' 

ओपी strspn को 2 तर्क सिर्फ रिक्त स्थान (यानी। अन्य सफेद अक्षर) की तुलना में अधिक गिनती करने के लिए " \t\r\n\0\x0B" होना चाहिए चाहता है (क्या trim सफेद पात्रों के रूप में परिभाषित करता है से लिया गया)।

प्रलेखन PHP: strspn - Manual

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