2013-01-19 57 views
0

我正在使用c和c#進行編程,我正在使用一些第三方正則表達式庫來識別鏈接模式。但昨天,出於某種原因,有人問我使用PHP代替。我不熟悉php的正則表達式,但我嘗試,沒有得到預期的結果。我不得不提取和替換形式的圖片src的鏈接:使用php正則表達式搜索鏈接

<img src="https://stackoverflow.com/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/> 

我只想路徑在src但報價可能是雙或單,也ID可能有所不同形式情況而(這裏是主要的:從:demo.jpg)

我試試下面的代碼

$searchfor = '/src="(.*?)binary\/capture.php?id=(.+?)"/'; 
$matches = array(); 
while (preg_match($searchfor, $stringtoreplace, $matches) == 1) { 
    // here if mataches found, replace the source text and search again 
    $stringtoreplace= str_replace($matches, 'whatever', $stringtoreplace); 
} 

但它不工作,什麼是我錯過或從上面的代碼中的任何錯誤?

更具體地說,讓說我有一個圖像標籤,它給SRC作爲

<img src="ANY_THING/binary/capture.php?id=main:slave:demo.jpg"/> 

這裏ANY_THING可能是任何東西,「/binary/capture.php?id=」將固定於所有的情況下, 「id =」之後的字符串的模式是「main:slave:demo.jpg」,冒號前面的字符串會根據情況而改變,jpeg的名稱也會有所不同。我希望把它作爲替代

<img src="/main/slave/demo.jpg"/> 

因爲我只有權修改PHP腳本的特定和限制時間,我想任何修改之前做調試我的代碼。謝謝。

回答

0

首先,正如你可能知道的,regex shouldn't be used to manipulate HTML

然而,嘗試:

$stringtoreplace = '<img src="https://stackoverflow.com/a/b/c/d/binary/capture.php?id=main:slave:demo.jpg"/>'; 
$new_str = preg_replace_callback(
    // The regex to match 
    '/<img(.*?)src="([^"]+)"(.*?)>/i', 
    function($matches) { // callback 
     parse_str(parse_url($matches[2], PHP_URL_QUERY), $queries); // convert query strings to array 
     $matches[2] = '/'.str_replace(':', '/', $queries['id']); // replace the url 
     return '<img'.$matches[1].'src="'.$matches[2].'"'.$matches[3].'>'; // return the replacement 
    }, 
    $stringtoreplace // str to replace 
); 
var_dump($new_str); 
+0

感謝您的答覆。但我不知道爲什麼,這是行不通的。 – user1285419

+0

我在本地嘗試過,它可以工作。你確定你使用正確的測試數據? http://puu.sh/1Q6dS –