2012-01-27 119 views
1

我想問一下關於php的preg_match_all。假設我們有下面的示例字符串:PHP preg_match_all

這是一個條款 - 值1 - 和-_value_2_-有一個小節 - value.3 - 項目。

我想提取所有字符串與開幕「 - 」和關閉「 - 」字符。需要輸出應該是:

Array 
(
[0] => Array 
    (
      [0] => -_value1_- 
      [1] => -_value_2_- 
      [2] => -_value.3_- 
     ) 
) 
+0

而且......你有什麼試過的?似乎很簡單[正則表達式](http://www.regular-expressions.info/tutorial.html) – Wrikken 2012-01-27 20:19:50

+0

我試過的正則表達式是「/-_.*._-/」,但它返回錯誤的結果..不是這樣正則表達式模式:( – 2012-01-27 20:22:03

+1

/(-.*?-)/或者/(-.*-)/U或者沒有(和) – Cheery 2012-01-27 20:23:55

回答

2

使用下面這個簡單的正則表達式/-.*?-//-.*-/U

U(PCRE_UNGREEDY)這個修飾符反轉的 量詞的「貪婪」的一個,使他們不被貪婪默認,但如果後面跟?變成貪婪 。它與Perl不兼容。它也可以通過模式內的(?U)修飾符設置或者在量詞後面的問號 來設置 (例如,*?)。

0

您可以使用此代碼:

$str="This is a clause with -value1- and -_value_2_- having a subclause of -value.3- items."; 
if (preg_match_all('/-[^-]*-/', $str, $m)) 
     print_r($m[0]); 
+0

謝謝,它給我需要相同的結果 – 2012-01-27 20:37:27

0

有時preg_match_all()可太複雜。在這些情況下,您可以使用explode來達到這個目的。

$matches = explode("-", $input); 

什麼explode()呢?

$input = "This is a basic example: -JOHN-. The End"; 

explode()$matches轉換爲數組。之後搜索「 - 」字符$input。找到「 - 」後會像下面那樣設置數組。

$input[0] ---> 「這是一個基本的例子:」

$input[1] ---> 「JOHN」

$input[2] ---> 「末端」。

explode()是替代方式。但最好的當然是preg_match_all()