2010-05-30 15 views
11

उदाहरण के लिए, मेरे पास एक लेख ".", "?", "!" और ":" वाक्य सीमा के अनुसार विभाजित किया जाना चाहिए।php विस्फोट या अन्य समान कार्यों का उपयोग करते समय delimiter रखने का कोई तरीका है?

लेकिन साथ ही सभी जानते हैं, चाहे preg_split या explode फ़ंक्शन, वे दोनों डिलीमीटर को हटा दें।

किसी भी मदद की वास्तव में सराहना की जाएगी!

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

मैं केवल ऊपर नीचे कोड के साथ आ सकते हैं, यह हालांकि महान काम करता है।

$content=preg_replace('/([\.\?\!\:])/',"\\1[D]",$content); 

धन्यवाद !!! हर कोई। 3 जवाब प्राप्त करने में केवल पांच मिनट हैं! और प्रश्न पूछने से पहले PHP मैनुअल को ध्यान से देखने में सक्षम होने के लिए मुझे माफ़ी मांगनी चाहिए। माफ़ कीजिये।

उत्तर

7

PREG_SPLIT_DELIM_CAPTURE झंडा

वापसी करेंगे delimiter = 0 के साथ मैच सरणी के साथ preg_split, match = 1

14

preg_split का उपयोग करते समय आप ध्वज PREG_SPLIT_DELIM_CAPTURE सेट कर सकते हैं और डिलीमीटर भी कैप्चर कर सकते हैं। एक समूह में विभाजित सीमांकक पैक करने के लिए

$parts = preg_split('/([.?!:])/', $str, -1, PREG_SPLIT_DELIM_CAPTURE); 
$sentences = array(); 
for ($i=0, $n=count($parts)-1; $i<$n; $i+=2) { 
    $sentences[] = $parts[$i].$parts[$i+1]; 
} 
if ($parts[$n] != '') { 
    $sentences[] = $parts[$n]; 
} 

ध्यान दें, अन्यथा वे पर कब्जा कर लिया नहीं किया जाएगा: तो फिर तुम में से 2 n और 2 n +1 प्रत्येक जोड़ी ले जा सकते हैं और उन्हें वापस एक साथ रखा।

+0

बस मैं क्या करना चाहता था ... लेकिन मैं टाइप करने के लिए बहुत विचित्र था :-) – Juergen

15

मुझे लगता है इस जोड़ने के लायक है। आप regex lookahead का उपयोग कर विभाजित करने के लिए से "के बाद" स्ट्रिंग में परिसीमक रख सकते हैं:

$input = "The address is http://stackoverflow.com/"; 
$parts = preg_split('@(?=http://)@', $input); 
// $parts[1] is "http://stackoverflow.com/" 

और अगर सीमांकक निश्चित लंबाई की है, तो आप lookbehind का उपयोग करके भाग "पहले" में सीमांकक रख सकते हैं:

$input = "The address is http://stackoverflow.com/"; 
$parts = preg_split('@(?<=http://)@', $input); 
// $parts[0] is "The address is http://" 

यह समाधान ज्यादातर मामलों में सरल और क्लीनर है।

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