从源代码中提取“;”或“=”符号的正则表达式?

时间:2016-03-29 17:15:22

标签: regex flex-lexer lex

例如

int val = 13;

Serial.begin(9600);

val = DigitalWrite(900,HIGH);

我真的想要提取像=;这样的特殊符号。

我已经能够提取出现在代码中相邻的符号,但我需要所有出现的内容。

我尝试了[^ "//"A-Za-z\t\n0-9]*[\;\=\{\}\,]+。两者都没有。

出了什么问题?

我为我的扫描仪制定了如下规则。(已更改)

分号[;]([\ n] | [^“//”])

赋值(。)?[=] +

大括号([{] | [}])([\ n] | [^“//”])

roundbarcket(“()”)“”

问题就像这些情况一样发生

  1. int val = 13; //它无法识别“=”因为“val”和“=”是相邻的。我想认识他们是否相邻

  2. serial.read(); //它无法识别()和;单独的。如果我添加分号规则和roundbarcket规则,();被认可了。

  3. 我该如何解决?

2 个答案:

答案 0 :(得分:2)

你想打破" DigitalWrite(900,HIGH);"进入" DigitalWrite" "("" 900"","" HIGH"")" &#34 ;;&#34 ;.我认为循环每个子字符串是最快的方法。

        string text = "val = DigitalWrite(900,HIGH);";
        string[] symbols = new string[] { "(", ")", ",", "=", ";"};
        List<string> tokens = new List<string>();
        string word = "";
        for( int i = 0; i < text.Length; i++ )
        {
            string letter = text.Substring( i, 1 );
            if( !letter.Equals( " " ) )
            {
                if( tokens.Contains( letter ) )
                {
                    if( word.Length > 0 )
                    {
                        tokens.Add( word );
                        word = "";
                    }
                    tokens.Add( letter );
                }
                else
                {
                    word += letter;
                    if(i == text.Length - 1 )
                        tokens.Add( word );
                }
            }
        }

答案 1 :(得分:0)

所以搜索“;”而“=”是你想要实现的最终目标? 在这种情况下,为什么不使用.find()函数之类的东西? 或者,您可以通过“;”拆分字符串首先,在之后搜索“=”。

如果您想在“=”和“;”之间抓取文字,请尝试使用=([^;]*);=(.*?);