2016-11-03 7 views
5

में अल्पविराम को अनदेखा करें मुझे कुछ मदद चाहिए। मैं चाहता हूं कि विशिष्ट स्ट्रिंग में अल्पविराम को अनदेखा करना है। यह एक अल्पविराम सेपरेटेड फ़ाइल सीएसवी है, लेकिन नाम में अल्पविराम है, और मुझे इसे अनदेखा करने की आवश्यकता है।php preg_split विशिष्ट स्ट्रिंग

मुझे क्या मिला है

<?php 
    $pattern = '/([\\W,\\s]+Inc.])|[,]/'; 
    $subject = 'hypertext language, programming, Amazon, Inc., 100'; 
    $limit = -1; 
    $flags = PREG_SPLIT_NO_EMPTY | PREG_SPLIT_DELIM_CAPTURE; 
    $result = preg_split ($pattern, $subject, $limit, $flags); 
    ?> 

परिणाम

$result (php code): 

<?php 
array (
    0 => 'hypertext language', 
    1 => ' programming', 
    2 => ' Amazon', 
    3 => ' Inc.', 
    4 => ' 100', 
); 
?> 

है और मैं नतीजा

$result (php code): 

    <?php 
    array (
     0 => 'hypertext language', 
     1 => ' programming', 
     2 => ' Amazon, Inc.', 
     3 => ' 100', 
    ); 
    ?> 

आपकी मदद :)

+1

नियम आप यहाँ लागू करना चाहते हैं क्या है? 'इंक' से मेल नहीं खाता है? की तरह ['/,(?!\s*Inc\.)/' ](https://regex101.com/r/iZlamw/1)? –

+0

धन्यवाद यह काम करता है :) –

+0

'str_getcsv', मानते हुए कि आपकी लाइन पहले से ही CSV के रूप में स्वरूपित है। – Progrock

उत्तर

3

नोट के लिए धन्यवाद करना चाहता हूँ कि [\W,\s] = \W\W किसी भी char से मेल खाता है जो एक अक्षर, अंक या अंडरस्कोर नहीं है। हालांकि, ऐसा लगता है कि आप बस , पर विभाजित करना चाहते हैं जिसका उपयोग अंतरिक्ष (ओं) * + Inc. के साथ नहीं किया जाता है।

आप प्राप्त करने के लिए एक negative lookahead उपयोग कर सकते हैं इस:

/,(?!\s*Inc\.)/ 
    ^^^^^^^^^^^^ 

देखें regex demo

(?!\s*Inc\.) किसी भी , मैच अगर वहाँ 0+ व्हाइटस्पेस (\s*) कर रहे हैं असफल हो जायेगी शाब्दिक वर्णों के क्रम के साथ पीछा किया उनके बाद Inc.

1

अपने ट्यूटोरियल से, यदि मैं अमेज़ॅन जानकारी को CSV के रूप में खींचता हूं, तो मुझे निम्न प्रारूप मिलता है। जिसे आप पीएचपी के मूल कार्यों में से एक के साथ पार्स कर सकते हैं। इससे पता चलता है कि आपको इस डेटा को संभालने के लिए विस्फोट या रेगेक्स का उपयोग करने की आवश्यकता नहीं है। इस काम के लिए सही उपकरण का उपयोग करें:

<?php 
$csv =<<<CSV 
"amzn","Amazon.com, Inc.",765.56,"11/2/2016","4:00pm","-19.85 - -2.53%",10985 
CSV; 

$array = str_getcsv($csv); 

var_dump($array); 

आउटपुट:

array (size=7) 
    0 => string 'amzn' (length=4) 
    1 => string 'Amazon.com, Inc.' (length=16) 
    2 => string '765.56' (length=6) 
    3 => string '11/2/2016' (length=9) 
    4 => string '4:00pm' (length=6) 
    5 => string '-19.85 - -2.53%' (length=15) 
    6 => string '10985' (length=5) 
संबंधित मुद्दे