C# 用于标识MQTT主题的正则表达式
我试图在C#中获得一个正则表达式来解析mqtt主题,以了解对系统中定义的每个主题类型执行哪个操作。我们必须区分两个主题:C# 用于标识MQTT主题的正则表达式,c#,regex,C#,Regex,我试图在C#中获得一个正则表达式来解析mqtt主题,以了解对系统中定义的每个主题类型执行哪个操作。我们必须区分两个主题: cd/hl/projects/{project_id}/var/{var_name} cd/hl/projects/{project_id}/var/{var_name}/write {project_id}可以是除换行符(\n)以外的任何字符。可以是空的 {var_name}可以是除换行符(\n)以外的任何字符。可以是空的 为了匹配字符串2,我使用了以下方法,并且它在我测试
^cd/hl/projects/.*/var/.*/write$
到目前为止还不错。但是当我尝试匹配1时失败了。在第二节也没有给出一个匹配。使用以下正则表达式:
^(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}
我的问题是:我采取了正确的方法?我错过了什么?我怎样才能实现我的目标
谢谢子部分不应包含
/
,而不仅仅是\n
。您应该将*
替换为[^/\n]*
并使用
REGEX 1: ^cd/hl/projects/([^/\n]*)/var/([^/\n]*)
REGEX 2: ^cd/hl/projects/([^/\n]*)/var/([^/\n]*)/write$
请参阅和
[^/\n]*
匹配除/
和\n
以外的任何0+(由于*
)字符 将*
替换为[^/]*
。它们也不能包含/
,而不仅仅是\n
。您需要编写两种不同的模式还是一种?请澄清。每个主题有一个模式。每个模式只应与自己的主题匹配。所以我需要两种不同的模式,1)cd/hl/projects/([^/]*)/var/([^/]*)和2)cd/hl/projects/([^/]*)/var/([^/]*)/write$-对吗?