2009-06-19 12 views
17

से एक स्ट्रिंग को निकालने के लिए मैं एक स्ट्रिंग है:php दोहरे उद्धरण

यह एक पाठ है, "आपकी शेष राशि $ 0.10 छोड़ दिया", अंत 0

मैं कैसे के बीच में स्ट्रिंग निकाल सकते हैं दोहरे उद्धरण चिह्नों और केवल पाठ (दोहरे उद्धरण चिह्नों के बिना):

आपका बैलेंस छोड़ दिया $ 0,10

मैंने preg_match_all() की कोशिश की है लेकिन कोई भाग्य नहीं है।

+0

आपको ['s ($ str) -> के बीच ('' ',' '' ')'] (https: // github मिल सकता है।com/joy-im/PHP-Str/blob/8fd0c608d5496d43adaa899642c1cce047e076dc/src/Str.php # L412) उपयोगी है, जैसा कि [इस स्टैंडअलोन लाइब्रेरी] में पाया गया है (https://github.com/delight-im/PHP-Str)। – caw

उत्तर

48

जब तक प्रारूप समान रहता है तब तक आप नियमित अभिव्यक्ति का उपयोग करके ऐसा कर सकते हैं। "([^"]+)" पैटर्न

  • डबल-बोली से मेल खाएगी
  • कम से कम एक गैर दोहरे-उद्धरण
  • डबल-उद्धरण

[^"]+ आसपास कोष्ठक मतलब यह है कि उस हिस्से के रूप में लौटा दी जाएगी एक अलग समूह

<?php 

$str = 'This is a text, "Your Balance left $0.10", End 0'; 

//forward slashes are the start and end delimeters 
//third parameter is the array we want to fill with matches 
if (preg_match('/"([^"]+)"/', $str, $m)) { 
    print $m[1]; 
} else { 
    //preg_match returns the number of matches found, 
    //so if here didn't match pattern 
} 

//output: Your Balance left $0.10 
+0

+1 सरल और मीठा – diEcho

-7

बस str_replace उपयोग करें और उद्धरण से बच:

str_replace("\"","",$yourString); 

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

क्षमा करें, देखने के फ्लॉप 2 उद्धरण के बाद पाठ नहीं है। उस स्थिति में, मैं केवल 2 खोजों में से एक था, पहला उद्धरण के लिए एक और दूसरे उद्धरण के लिए एक, और फिर दोनों के बीच सभी सामानों को अतिरिक्त करने के लिए एक सबस्ट्रेट करें।

0

नियमित अभिव्यक्ति '"([^\\"]+)"' दो डबल कोट्स के बीच कुछ भी मेल खाएगी।

$string = '"Your Balance left $0.10", End 0'; 
preg_match('"([^\\"]+)"', $string, $result); 
echo $result[0]; 
9

इस प्रयास करें:

preg_match_all('`"([^"]*)"`', $string, $results); 

आप चाहिए पाने के $ परिणामों में अपने सभी निकाले तार [1]।

+0

+1 preg_match_all – demongolem

+1

के साथ समाधान प्रदान करने के लिए यह वास्तव में केवल एक है जो काम करता है जब आपके पास एक स्ट्रिंग में उद्धरण के बीच एकाधिक मान होते हैं। निम्नलिखित की तरह: (ए: 2: {i: 0; एस: 3: "14 9"; i: 1; एस: 3: "143";}) + सबसे साफ समाधान। –

5

अन्य उत्तरों के विपरीत, यह भाग निकलता है, उदाहरण के लिए "string with \" quote in it"

$content = stripslashes(preg_match('/"((?:[^"]|\\\\.)*)"/')); 
13

हर कोई एक पूर्ण विशेषताओं स्ट्रिंग पार्सर लिए शिकार के लिए, इस प्रयास करें:

$haystack = "something else before 'Lars\' Teststring in quotes' something else after"; 
preg_match("/(?:(?:\"(?:\\\\\"|[^\"])+\")|(?:'(?:\\\'|[^'])+'))/is",$haystack,$match); 

रिटर्न:

Array 
(
    [0] => 'Lars\' Teststring in quotes' 
) 

इस के साथ काम करता

preg_match में
(?:(?:"(?:\\"|[^"])+")|(?:'(?:\\'|[^'])+')); 

उपयोग एकल और डबल उद्धृत स्ट्रिंग एफ ragments।

+3

काम करता है लेकिन क्या लौटने वाली स्ट्रिंग से कोट्स को बाहर करने का कोई तरीका है? – 3zzy

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