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请不要在你自己的问题得到回答后诋毁它。这些问题应该留给后代,并帮助未来的读者。非常感谢你。但是有什么办法来区分正则表达式吗?