2012-12-19 8 views
5

preg_split में दो delimiters मर्ज कैसे करें? उदाहरण के लिए:PHP में दो delimiters के साथ preg_split

$str = "this is a test , and more"; 
$array = preg_split('/(|,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); 
print_r($array); 

Array 
(
    [0] => this 
    [1] => 
    [2] => is 
    [3] => 
    [4] => a 
    [5] => 
    [6] => test 
    [7] => 
    [8] => 
    [9] => , 
    [10] => 
    [11] => 
    [12] => and 
    [13] => 
    [14] => more 
) 

के रूप में एक सरणी का उत्पादन करेगा, लेकिन मैं

Array 
(
    [0] => this 
    [1] => 
    [2] => is 
    [3] => 
    [4] => a 
    [5] => 
    [6] => test 
    [7] => , 
    [8] => and 
    [9] => 
    [10] => more 
) 

वास्तव में प्राप्त करना चाहते हैं, मैं सरणी तत्वों विलय करने के लिए जब दो सीमांकक पड़ोसी हैं चाहता हूँ। दूसरे शब्दों में, यदि पहला भाग दूसरा डिलीमीटर होता है तो पहले डेलीमीटर को अनदेखा कर दें।

+0

आपका अंतिम अनुच्छेद कुछ ऐसा है जो रेगेक्स के साथ नहीं किया जा सकता है। इसके लिए आपको कस्टम कोड चाहिए। –

उत्तर

3

एक चरित्र वर्ग उपयोग करके देखें: /[ ,]+/

+ एक परिमाणक जिसका अर्थ है '1 या अधिक "

+1

'preg_split' की 'कैप्चर' सुविधा केवल ब्रांड्स के भीतर डिलीमीटर के लिए काम करती है। '[]' के साथ, हम delimiters पर कब्जा नहीं कर सकते हैं। – Googlebot

+1

क्या आप ब्रैकेट को ब्रैकेट के चारों ओर रख सकते हैं? –

+0

मेरा बुरा! हां, इसे आसानी से कोष्ठक के भीतर रखा जा सकता है, मैंने केवल ब्रैकेट को प्रतिस्थापन के रूप में देखा है। – Googlebot

2

है क्या लगता है कि स्थिति पहली जगह में ऐसा नहीं होता है बनाने के बारे में:

<?php 
    $str = "this is a test , and more"; 
    $str=preg_replace('/ *, */',',',$str); 
    $array = preg_split('/(|,)/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); 
    print_r($array); 
?> 

Array 
(
    [0] => this 
    [1] => 
    [2] => is 
    [3] => 
    [4] => a 
    [5] => 
    [6] => test 
    [7] => , 
    [8] => and 
    [9] => 
    [10] => more 
) 
+0

बहुत मुश्किल समाधान है, और अच्छी तरह से काम करना चाहिए! – Googlebot

1

/([, ]+)/ का उपयोग करके यह काम करता है। देखें codepad

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