2014-03-04 34 views
-1

您好我想在PHP的C文件中計算運算符類似於+, - ,++, - ,< <,>>,!=,* =,...等 Is there用正則表達式對它進行計數的方法(類似於++和+的計數將會計爲2而不是3)?運算符在PHP中的正則表達式C

+2

正則表達式?別。這不是正確的工具。 –

+0

這真的取決於你需要的準確度。如果你真的需要一個確切的計數,關於使用詞法分析器的答案是正確的。下面的正則表達式答案應該能讓你得到一個粗略的數字,但它會遭受誤報,因爲它會提供一個char或char對計數,而不是一個真正的算子計數。 – AaronM

回答

0

你可以使用這個表達式:

(\+\+|--|==|>=|<=|!=|<<|>>|!=|\+=|-=|\*=|\/=|%=|\+|-|\*|%|=) 

然後僅計算匹配的數量。像這樣:

$code = file_get_contents("cfile.c"); 

preg_match_all("/(\+\+|--|==|>=|<=|!=|<<|>>|!=|\+=|-=|\*=|\/=|%=|\+|-|\*|%|=)/", $code, $matches); 

$num_operators = count($matches[0]); 

注:如果您還希望包括邏輯運算符&&||!,然後把它們添加到該模式的結尾,就像這樣:

(\+\+|--|==|>=|<=|!=|<<|>>|!=|\+=|-=|\*=|\/=|%=|\+|-|\*|%|=|&&|\|\||!) 
+0

\ B([+ *(%)= - ] | [><!+ * /% - ] = |([<> + = | - ])\ 2))\ b – AaronM

+0

第一組是單曲,第二組其次是一個=第三組是雙打。第三組可能不適用於某些正則表達式編譯器,因爲它使用了嵌入式後向引用。 – AaronM

+1

感謝你們兩人,它完美的作品:) – user3381194

0

正則表達式根本無法勝任這項工作。

考慮下面的代碼,例如:

/*************************************************************** 
There are no multiplication or division operators in this file 
***************************************************************/ 
#include <stdio.h> // No comparison operators either 
#define _ - 
int main() { 
    int a=0,b=~6; 
    printf("%s\n","Hello?"); // No modulus or ternary operators :-\ 
    a += b; // Not even an addition operator 
    printf("a is still equal to %d\n",a); // See what I mean? 
    a = a _ b _ b _ b _ b _ b _ b; // But there are 6 subtraction operators 
    printf("The answer is %d\n",a); // Would your regex find those?? 
    return 0; 
} 

有很多在這個文件中的陷阱,將是非常困難的,以避免與正則表達式。 (不要讓我開始trigraphs。)

要正確地做到這一點,你應該首先通過預處理器將源代碼(如gcc -E)來剝去的意見,擴大#define語句。之後,你可能會更好地使用lexical analyzer來解析結果。