我正在尋找一個正則表達式來匹配所有功能塊(從開始到結束)在PHP文件。例如:Python的正則表達式來找到文件中的PHP函數
function test_function($var) {
if ($var == 'somethin') {
print 'hi';
}
etc.
}
我需要塊的起始偏移量和結束偏移量。我可以使用哪些正則表達式?
我正在尋找一個正則表達式來匹配所有功能塊(從開始到結束)在PHP文件。例如:Python的正則表達式來找到文件中的PHP函數
function test_function($var) {
if ($var == 'somethin') {
print 'hi';
}
etc.
}
我需要塊的起始偏移量和結束偏移量。我可以使用哪些正則表達式?
這是非常非常複雜的,不能用一個正則表達式來完成。
你可能會認爲你可以輕鬆搭配`這樣的功能的開頭:
\bfunction\b\s+\S+[^\(](\s+)?\(.*?\)\s+\{
但是你不能的原因是什麼,如果有這樣的代碼?
$string = "function myfunction() {}";
所以你應該搜索一切什麼沒有引用。所以排除帶引號的字符串您可以使用此正則表達式:
(?:(?=(?:(?:\\.|"(?:\\.|[^"\\])*"|[^\\'"])*'(?:\\.|"(?:\\.|[^"'\\])*"|[^\\'])*')*(?:\\.|"(?:\\.|[^"\\])*"|[^\\'])*$)(?=(?:(?:\\.|'(?:\\.|[^'\\])*'|[^\\'"])*"(?:\\.|'(?:\\.|[^'"\\])*'|[^\\"])*")*(?:\\.|'(?:\\.|[^'\\])*'|[^\\"])*$)(?:\\.|[^\\'"]))+
你應該做的是計算所有{
和}
,因爲你需要知道的功能停止時,我不能去想任何正則表達式接下來的事情這可以做到這一點。所以你需要通過循環來做到這一點。
你可以用'(?R'(也可以不用Python)計算'''計數,一些子程序可以簡化引號。對於任意PHP,它還需要注意註釋等。看起來像一個很好的部分解決方案(近似值通常是更好的選擇) – mario 2011-12-25 15:22:00
@micha,這是什麼*不包括引用的字符串*正則表達式應該完全是這樣嗎?它看起來不能正常使用PHP字符串,因爲它沒有把'foo'bar''當作一個有效的字符串 – Qtax 2011-12-25 15:34:10
它會選擇除引用字符串以外的所有內容,請參閱[action](http://gskinner.com/RegExr/?2vcr2) – noob 2011-12-25 15:55:10
正則表達式不是一個很好的選擇。用簡單的解析器會更好。 – 2011-12-25 15:02:33