我有一个简单的正则表达式来检查一个函数名是否位于一个C代码块中(实际的名称查找代码是用Java编写的).对于此示例,我正在尝试查找的函数名称称为putFillerData.代码块如下所示:
static void fillerSwapByteOrder(int t_database, tag_t t_message, char* data_buff, int* pos)
{
short data_length = trxDBGetNodeSize(t_database);
if (!data_length) return;
char *data = umalloc(data_length);
if (data_length == sizeof(short))
{
short s_data = 0;
shareGReadData(t_database, &s_data);
short nbo_data = htons(s_data);
memcpy(data, &nbo_data, sizeof(short));
}
else if (data_length == sizeof(int))
{
int s_data = 0;
shareGReadData(t_database, &s_data);
int nbo_data = htonl(s_data);
memcpy(data, &nbo_data, sizeof(int));
}
else
{
ufree(data);
return;
}
putFillerData(t_message, data, data_length, data_buff, pos);
ufree(data);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用的正则表达式语句如下所示:
Pattern.matches("\\b" + Pattern.quote(name) + "\\b", code);
Run Code Online (Sandbox Code Playgroud)
但是,这总是返回假...为什么?
我正在使用这个正则表达式的原因是因为.contains也找到了子串,这不是我想要的...
.matches()如果整个字符串与正则表达式匹配,则仅返回True .
您想使用该.find()方法:
Pattern regex = Pattern.compile("\\b" + Pattern.quote(name) + "\\b");
Matcher regexMatcher = regex.matcher(subjectString);
foundMatch = regexMatcher.find();
Run Code Online (Sandbox Code Playgroud)
此外,\b仅匹配字母数字字符和非字母数字字符.所以如果你name是的话应该putFillerData没问题,但如果它是这样的,那就不行了putFillerData().