正则表达式匹配一个函数,前提是它包含一个特定的变量
Regex match a function if only if it contains a specific variable
我有从文件中读取的这个字符串。
/**********************************************************************functionheaderstuff***********************************************************************************************************************/
void fn1(void)
{
b= 8;
}
/***********************************************************************functionheaderstuff***********************************************************************************************************************/
void fn2(int a, intb)
{ int c;
var = 6;
}
我想匹配包含写入变量var的函数
有了这个 regex (?<=[*]{60}\/)(\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{))).*(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;])
,我匹配这两个函数,因为 .* 是贪婪的。我需要它在遇到 }\s*\/[*]{60}
时不匹配,并且仅在函数包含正在写入的变量时才匹配,最好仅在变量不在注释中时才匹配。
否定前瞻无效- ((?<=[*]{60}\/)\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{)).*)(?!(\s*}\s*\/[*]{60}))(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;])
我的函数将从我共享的函数头类型开始。查找正在写入的变量并识别函数工作正常。
如果函数包含它从下一个函数获取的 var,则此正则表达式工作正常。我在这里做错了什么?
我改变了方法并得到了我需要的东西。我最初删除了所有评论。我匹配了字符串中的函数并将其添加到列表中。然后检查变量。
Python code
import regex
text = """void fn1(void){ b= 8;} void fn2(int a, intb){ int c; var = 6;}"""
#checks for complete function definition
string1 = r'\w+(?:\s+\w+)*\w+[(][\w,\.*\s&\[\]]*[)]\s*({(?:[^{}]++|(?1))*})'
varwrite = r'\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;]'
reg = regex.compile(varwrite,regex.MULTILINE )
y =[x.group() for x in regex.finditer(string1,text,regex.DOTALL)]
print(y)
for line in range(len(y)):
if reg.search(y[line]):
z =y[line].split('(',1)[0]
print(z.split()[-1])
我有从文件中读取的这个字符串。
/**********************************************************************functionheaderstuff***********************************************************************************************************************/
void fn1(void)
{
b= 8;
}
/***********************************************************************functionheaderstuff***********************************************************************************************************************/
void fn2(int a, intb)
{ int c;
var = 6;
}
我想匹配包含写入变量var的函数
有了这个 regex (?<=[*]{60}\/)(\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{))).*(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;])
,我匹配这两个函数,因为 .* 是贪婪的。我需要它在遇到 }\s*\/[*]{60}
时不匹配,并且仅在函数包含正在写入的变量时才匹配,最好仅在变量不在注释中时才匹配。
否定前瞻无效- ((?<=[*]{60}\/)\s*\w+(?: \w+\s*)(?=(\((.*?)\)\s*{)).*)(?!(\s*}\s*\/[*]{60}))(\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;])
我的函数将从我共享的函数头类型开始。查找正在写入的变量并识别函数工作正常。 如果函数包含它从下一个函数获取的 var,则此正则表达式工作正常。我在这里做错了什么?
我改变了方法并得到了我需要的东西。我最初删除了所有评论。我匹配了字符串中的函数并将其添加到列表中。然后检查变量。 Python code
import regex
text = """void fn1(void){ b= 8;} void fn2(int a, intb){ int c; var = 6;}"""
#checks for complete function definition
string1 = r'\w+(?:\s+\w+)*\w+[(][\w,\.*\s&\[\]]*[)]\s*({(?:[^{}]++|(?1))*})'
varwrite = r'\bvar\b([^>=<!;{])*[=]{1}[^=]*?[;]'
reg = regex.compile(varwrite,regex.MULTILINE )
y =[x.group() for x in regex.finditer(string1,text,regex.DOTALL)]
print(y)
for line in range(len(y)):
if reg.search(y[line]):
z =y[line].split('(',1)[0]
print(z.split()[-1])