2013-01-15 100 views
1

我正在尋找一個解決方案,爲此。很容易選擇PHP標籤中的所有內容(基本上),但我似乎無法完成相反的工作。匹配PHP標籤外的文本/ html

首先,我因子評分這會工作:

/\?>(?<html>.*?)<\?|^(.*?)(?=<\?)|(?<=\? >)(.*?)$/ 

(?一切>和\ < \?之間和\ < \?一切的一切^之間>和$?)

但是在這裏,問題在於一個文件以<?php開頭,並且沒有一個其他結束標記,直到文件結尾失敗。

在一天結束的時候,我想只是比賽的一切<? ... ?>

THIS,<?php ... ?> 
THIS<?php ... ?> 
AND THIS 

外面有沒有人有一個想法?謝謝。

+0

如果很容易選擇裏面的所有內容,你爲什麼不只是'preg_replace'那些比賽?這樣你最終只有php標籤外的內容。 –

+0

因爲我仍然需要其餘的來保持它是如何使用它的preg_replace_callback。我想操縱php標籤之外的內容,並保持代碼不變,基本上 – Katai

回答

1

嘗試,你需要將在第一羣組這個

$yourcode = <<<TXT 
THIS 
, 
<?php 
... ?> 
THIS 

<?php 
... ?> 
THIS TOO 

<?php ... ?>AND 
THIS 

TXT; 

preg_match_all('/ 
    (?| 
     ((?:(?!\?>).)+)(?:<\?php)   # all chars not containing "?>" sequence until "<?php" 
     |         # or 
     (?:\?>)((?:(?!\?>).)+)(?:<\?php) # all chars not containing "?>" sequence between "?>" and "<?php" 
     |         # or 
     (?:\?>)(.+)      # all chars after "?>" 
    )/sx', 
    $yourcode, 
    $matches 
); 
print_r($matches[1]); 

一切。 所以輸出將是:

Array 
(
    [0] => THIS 
, 

    [1] => 
THIS 


    [2] => 
THIS TOO 


    [3] => AND 
THIS 

) 
+0

完美工作,謝謝! – Katai