Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 用于提取“的正则表达式”&引用;或=&引用;源代码中的符号?_Regex_Flex Lexer_Lex - Fatal编程技术网

Regex 用于提取“的正则表达式”&引用;或=&引用;源代码中的符号?

Regex 用于提取“的正则表达式”&引用;或=&引用;源代码中的符号?,regex,flex-lexer,lex,Regex,Flex Lexer,Lex,比如说 int val = 13; Serial.begin(9600); val = DigitalWrite(900,HIGH); 我真的很想提取像=和这样的特殊符号 我已经能够提取代码中相邻出现的符号,但我需要所有出现的符号 我试过[^”/“A-Za-z\t\n0-9]*和[\;\=\{\}\,]+。两者都不起作用 怎么了 我为我的扫描仪制定了如下规则。(已更改) 分号[;]([\n]|[^”//“]) 赋值(.)?[=]+ 大括号([{]|[}])([\n]|[^”//“]))

比如说

int val = 13;

Serial.begin(9600);

val = DigitalWrite(900,HIGH);
我真的很想提取像
=
这样的特殊符号

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

我试过
[^”/“A-Za-z\t\n0-9]*
[\;\=\{\}\,]+
。两者都不起作用

怎么了


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

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

赋值(.)?[=]+

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

圆面包(“()”)

问题就是这样发生的

  • int val=13;//它无法识别“=”,因为“val”和“=”相邻。我想识别它们是否相邻

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

  • 我该如何解决它们呢?

    那么,搜索“;”和“=”是您想要实现的最终目标吗? 在这种情况下,为什么不使用类似于
    .find()的函数呢?
    或者,可以先按“;”拆分字符串,然后搜索“=”

    如果要获取介于“=”和“;”之间的文本,请尝试使用
    =([^;]*)
    =(.*)

    您想将“DigitalWrite(900,高)”拆分为“DigitalWrite”(“900”,“高”);”。我认为循环每个子字符串是最快的方法

            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 );
                    }
                }
            }
    
    string text=“val=DigitalWrite(900,高);”;
    字符串[]符号=新字符串[]{(“,”,“,”,“=”,“;”};
    列表标记=新列表();
    字串=”;
    for(int i=0;i0)
    {
    添加(单词);
    单词=”;
    }
    代币。添加(字母);
    }
    其他的
    {
    单词+=字母;
    if(i==text.Length-1)
    添加(单词);
    }
    }
    }
    
    您建议的第二种方法无效。。最终目的是提取特殊符号。val=数字写入(900,高);在这里,我想分开;(a)及;这是最终目标。或任何其他特殊符号!你的意思是拆分数字写入(900,高);“数字写入”(“900”、“高”)?给我们更多的细节,伙计,没错!或数字写入(900,高);但我想把它分成你说的更详细的部分。我试图从源代码中识别标识符、数字、特殊符号、注释!如果要识别单个字符,请不要使用重复运算符(
    *
    +
    )。只需
    […]
    即可匹配一个字符。此外,除反斜杠外,您不需要在字符类内反斜杠转义字符。所以
    [;={},]
    可以匹配其中一个字符(正如我所说,
    [;={},]+
    将匹配任意数量的此类字符,因此它将匹配字符串
    };
    作为单个标记。我尝试了[;={}]但有一个警告。-找不到正确的匹配项我一直在努力分割令牌。例如int val=13;case was success int val=13;case was not success如何分割它们?我想您需要显示更多扫描仪定义,并更清楚地描述您的要求。我已编辑了我的问题。请检查!我真的很想知道我错过了什么。@WonHeeLee请不要在你自己的问题得到回答后诋毁它。这些问题应该留给后代,并帮助未来的读者。非常感谢你。但是有什么办法来区分正则表达式吗?