2012-01-19 55 views
2

任何人都可以幫助一個有效的正則表達式嗎?正則表達式來查找PHP文件中的函數參數

我有一個包含功能的文件,像這樣的

$variable1 = tr ('This was written in % s . ', array ($year)); 

tr ('This was written in % s % s . ' ,array ($month , $year)); 

tr('some string ') 

串總是用單引號。

我需要從源文本中獲得與fopen資金提取所有字符串傳遞到tr()函數。我使用PHP來解析php文件。任何幫助?

UPDATE作品:

  $fileContents=file_get_contents($file);    


      preg_match_all("/tr\('(.*?)'/", $fileContents, $matches); 

      //preg_match_all('/(?<=tr\s?\(\s?\')(?:\\\\.|[^\\\\\'])*(?=\')/i',  $fileContents, $matches, PREG_PATTERN_ORDER); 

出口(json_encode($比賽));

回答

1

如果我正確理解你的問題,你需要一個正則表達式來匹配傳遞給函數tr()的函數。

以下的regex應該做的:

/tr\('(.*?)'/ 

所以:

<?php 
preg_match("/tr\('(.*?)'/", $fileContents, $matches); 
print_r($matches); 
+0

我會嘗試,並會報告:) –

+0

你好保羅。我試過了。它的工作,但不是那樣,我需要...我已經改變它preg_match_all,因爲有多個字符串...我會修改問題,所以你看到代碼我有 –

+0

它的作品,但爲什麼在第一個數組是給帶tr的字符串(在第二個沒有和匹配...這是正常的嗎? –

4

你有沒有考慮使用,而不是複雜正則表達式PHP的Tokenizer功能呢?

+0

沒有其他的,我認爲通常的正則表達式會做...什麼是標記器的利弊? –

+0

一個,你不必擔心空白(或者是單引號還是雙引號),或者結果是否被賦值給變量,或者參數是否有嵌套的函數調用。使用PHP tokenizer的另一個參數是,它幾乎肯定會比PCRE搜索PHP代碼時......但這一切都取決於你爲什麼需要這個 –

相關問題