2013-04-02 132 views
-3

我有一個包含雙引號或單引號的字符串。我需要做的就是呼應報價之間的一切:在引號之間獲取字符串

$str = "'abc de', xye, jhy, jjou"; 
$str2 = "\"abc de\", xye, jhy, jjou"; 

我不介意使用正則表達式(的preg_match),或內置功能的任何其它的PHP。

請指教。

問候,

+7

此問題沒有顯示任何研究工作。 **做你的作業很重要**。告訴我們你發現了什麼,***爲什麼它不符合你的需求。這表明你已經花時間去嘗試幫助你自己了,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案。 [FAQ](http://stackoverflow.com/questions/how-to-ask)。 –

+0

我對正則表達式沒有太多的知識。我可以嘗試其他功能,但我知道的任何需要知道的字符串位置。在這種情況下,報價並不總是在第一位。 –

回答

6

使用preg_match_all

$str = "'abc de', xye, \"jhy\", blah blah 'bob' \"gfofgok\", jjou"; 
preg_match_all('/".*?"|\'.*?\'/', $str, $matches); 
print_r($matches); 

這將返回:

Array ( 
    [0] => Array ( 
     [0] => 'abc de' 
     [1] => "jhy" 
     [2] => 'bob' 
     [3] => "gfofgok" 
    ) 
) 

正則表達式的說明:

" -> Match a double quote 
.* -> Match zero or more of any character 
?" -> Match as a non-greedy match until the next double quote 
| -> or 
\' -> Match a single quote 
.* -> Match zero or more of any character 
?\' -> Match as non-greedy match until the next single quote. 

所以$matches[0]是包含單個或雙引號中存在的所有字符串數組。

+0

爲什麼不把它們合併成一個,比如'([''])(。*?)\ 1'? – Wiseguy

+0

是的,我希望能夠合併一些東西,因爲這會在foreach循環中執行 –

+0

@HassanZ I'我已經更新了我的回答, –

0

對於這種情況,你可以使用內置的功能explode

function getBetween($string){ 
    //explode the string 
    $exploded=explode("'",$string); 
    //print using foreach loop or in any way you want 
    foreach($exploded as $explode){ 
     echo $explode.'<br/>'; 
    } 
} 
+0

這不包括雙引號的情況。此外,該函數應該只打印引號之間的字符串。 – Quasdunk

1

正則表達式都沒有,即使它們看起來嚇人開始有教程或者它是一個樣子那麼複雜文檔就會清晰很多

按您的問題,對此看看,並嘗試使用它

$str = "'abc de', xye, jhy, jjou"; 
$str2 = "\"abc de\", xye, jhy, jjou"; 
$match = $match2 = array(); 
preg_match("/'(.+)'/", $str, $match); 
preg_match("/\"(.+)\"/", $str2, $match2); 
print_r($match); 
print_r($match2); 
之前瞭解它