2012-07-23 92 views
0

我有以下代碼正則表達式的PHP代碼?

<? 
php drupal_set_message("Your registration submission has been received."); 
drupal_goto("/events-initiatives/events-listing"); 
?> 

而且我想刪除一切,但Your registration submission has been received.這個消息會改變,所以我需要它是一個通配符。因此,它也將使說

<?php 

drupal_set_message("Testing!!!"); 
drupal_goto("/events-initiatives/events-listing"); 

?> 

但我無法弄清楚如何做的PHP代碼,我目前的一個是

preg_replace('#(<?php drupal_set_message(").*?("); drupal_goto("/guidelines-resources/professionals/lending-library"); ?>)#', '$1$2', $string); 

,但不工作,它似乎有問題與(在裏面。

任何想法,我怎麼能做到這一點?

+1

我對Drupal不熟悉,但它應該是傳遞給'drupal_set_message()'函數的PCRE正則表達式嗎? – Crontab 2012-07-23 17:58:02

+0

你是否想要做一個正則表達式來替換你的代碼中出現的所有這些?否則,我不明白爲什麼你不只是傳遞一個變量到drupal_set_message函數中,該變量是你想要的消息的任何值。 – 2012-07-23 17:58:06

+2

你們爲什麼退步?爲什麼你刪除了正則表達式,並將其替換爲它不打算的東西? – Steven 2012-07-23 17:59:10

回答

1

從看你原來的職位,(在你的正則表達式改爲一個PHP代碼段)我建議你在尋找沿着這些線路正則表達式:

#<\?php\s+drupal_set_message\(".*?"\);\s+drupal_goto\("/guidelines-resources/professionals/lending-library"\);\s+\?>#

注意,這個正則表達式:

  • 逸出所有的特殊字符(例如,?,(和)),與前述斜線
  • 代替一個單一的空間與\s+相匹配的一個或多個consec utive空白字符

編輯

重讀你的問題,如果你想唯一剩下的東西是作爲參數傳遞給drupal_set_message通過的文本後,再試試這個:

$pattern = '#\bdrupal_set_message\("(.*?)"\)#'; 
$found = preg_match($pattern, $subject, $matches); 

// if found, $matches[1] will contain the argument to drupal_set_message 
+2

顯然這真的很難。人們會寧願下臺,然後做出愚蠢的問題然後回答。 – Steven 2012-07-23 18:16:18

+0

小心一些意想不到的字符串,比如'blah blah \「); ......「'這可能與你的其他正則表達式匹配 – megaflop 2012-07-23 18:24:29

+0

第二個實際上很有意義,不知道爲什麼我沒有想到這一點。 – Steven 2012-07-23 18:32:21

-1

可以逃避特殊字符(但實際上,就在打開和關閉括號)用反斜槓。在一個側面說明,如果你有一個 體面的IDE,那麼它應該有複雜的正則表達式的搜索和替換;使用它(儘管如果你這樣做,你可能還需要避開正斜槓,因爲那些是你的IDE最可能使用的分隔符)。