2011-10-05 76 views
-1

下面的代碼可以工作,但是如何編輯它才能在結束括號後檢測第一個大括號?我只需要一行正則表達式代碼編輯

'/\{(([^{}]*|(?R))*)\}/' 

實施例:

if (1==1) 
{ 
echo "testing {$username}"; 
} 

的問題是,它檢測到ALL大括號,連一個圍繞$ username變量。所以我認爲一個解決方案就是在第一個花括號之前檢測是否存在a)。我自己嘗試了大約20種不同的東西,但無法實現。如何編輯才能檢測到){哦,並且如果在第一個大括號和結束括號之間存在空格和製表符(如果有關的話),請添加代碼。謝謝。

+3

在深入細節之前,您試圖達到的目標是什麼?如果你想解析PHP代碼 - 這是它對我的看法 - 我會推薦使用PHP標記器,而不是試圖用正則表達式來構建東西:http://de.php.net/manual/en/function .token-get-all.php - 如果這對你沒有用,我會建議自己編寫一個標記器,無論如何...解析一種編程語言會變得非常難看,如果你想用簡單的正則表達式 – aurora

+0

謝謝,但一切都很完美,並且已經到位,我只需要編輯該行而不是進入一個全新的方向。 –

回答

0

您可以使用:

\)\s*\{ 

爲你的模式的一部分來檢測喜歡你例如簡單的情況。請注意,雖然不能使用可變長度的正向後置,所以您無法將其更改爲(?< =)\ s *){

雖然我的模式仍會選取被註釋掉的代碼,並且不會檢測到在)和{之間有評論的代碼。你不想用正則表達式來試圖檢測這種情況。