这个正则表达式应该工作不应该吗?

时间:2012-09-18 09:26:02

标签: java regex

我有一个简单的正则表达式来检查一个函数名是否位于一个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);
}

我使用的正则表达式语句如下所示:

Pattern.matches("\\b" + Pattern.quote(name) + "\\b", code);

然而,这总是返回假...为什么?

我使用这个正则表达式的原因是因为.contains也找到了子串,这不是我想要的......

2 个答案:

答案 0 :(得分:6)

.matches()仅在整个字符串与正则表达式匹配时才返回True。

您想使用.find()方法:

Pattern regex = Pattern.compile("\\b" + Pattern.quote(name) + "\\b");
Matcher regexMatcher = regex.matcher(subjectString);
foundMatch = regexMatcher.find();

此外,\b仅匹配字母数字和非字母数字字符。因此,如果nameputFillerData,则应该没问题,但如果类似putFillerData()则不行。

答案 1 :(得分:0)

使用find(),这将是合适的。

Pattern pat = Pattern.compile("\\b" + Pattern.quote(name) + "\\b");
Matcher matcher = pat.matcher("Target_Source");

String s = new String();

while(matcher.find()){


   foundMatch = matcher.group(0);

}