2012-08-09 54 views
0

我想從正則表達式中取出所有字符。正則表達式,問題組

$str = "html code <script> var='a,b,c,d,e,f,g,h' </sript> html code"; 
preg_match_all ('#var =.((\w),?)+.#',$str,$m); 
echo "<pre>"; 
print_r ($ m); 
echo "</ pre>"; 

結果:

Array 
(
    [0] => Array 
     (
      [0] => var = 'a, b, c, d, e, f, g, h' 
     ) 

    [1] => Array 
     (
      [0] => h 
     ) 

    [2] => Array 
     (
      [0] => h 
     ) 

) 

^h - 最後搜尋股票,爲什麼呢?

+1

所有當代引擎中的正則表達式都超過「常規」:後向引用不包含在(純)常規語言中。因此更新了標籤。 – Richard 2012-08-09 09:55:35

回答

0

因爲您在組之後多次重複使用組+。這樣,該組每次都匹配,直到h,最後一次匹配,表達完成。

如果您希望每個比賽都在一個組中,那麼您必須事後拆分完整比賽或爲自己創建每個組。

+0

var =。((\ w),?(\ w),?(\ w),?(\ w),?(\ w),?(\ w),?(\ w),?)。這樣做? – Opalosolo 2012-08-09 10:00:18

0

我認爲你正在嘗試做一些不太適合正則表達式的東西 - 儘管有時它們是工作的最佳工具,但它們僅限於匹配可​​以用某種方式描述的模式。他們沒有控制邏輯,所以不能循環或遞歸。用正則表達式和其他方法來達到你想要的效果是很好的。

在這種情況下,我會使用正則表達式(的preg_match - 不preg_match_all)來匹配var='...'這樣你就可以提取...,然後通過逗號分割字符串,分隔每個項到一個數組。

如果您嘗試彎曲正則表達式來完成所有操作,那麼效率就會低得多,而且可靠性也會降低(因爲在這種情況下很難寫出堅如磐石的正則表達式)。