我试图在C中获得一个正则表达式来解析mqtt主题,以了解我们在系统中定义的每个主题类型要执行的操作。我们必须区分两个主题:
-
cd/hl/projects/{project\u id}/var/{var\u name}
-
cd/hl/projects/{project\u id}/var/{var\u name}/write
{project\u id}可以是除换行符(\n)以外的任何字符。可以为空
{var\u name}可以是除换行符(\n)以外的任何字符。可以为空
为了匹配字符串2,我使用以下方法,并且它在我测试的所有情况下都有效:
^cd/hl/projects/.*/var/.*/write$
到现在为止,一直都还不错。但当我尝试匹配1时,我失败了。也没有在2上进行匹配。使用以下正则表达式:
^(cd/hl/projects/.*/var/.*)(?!/write)$
what I think should do (but it doesn't):
(cd/hl/projects/.*/var/.*) #match any projects and var_names
(?!/write) #not match if /write appears
问题是,我无法停止匹配最后有/写的字符串,例如:
cd/hl/projects/4d69439d-8c13-4e83-9ed5-60659d953f9f/var/test_count_one/write
我只想不匹配上面的字符串,而只匹配:
cd/hl/projects/{project_id}/var/{var_name}
我的问题是:我采取了正确的方法?我错过了什么?我怎样才能实现我的目标?
谢谢