我试图在C#中使用正则表达式来解析mqtt主题,以了解我们在系统中定义的每种主题类型要执行的操作。我们有两个必须区分的主题:
{project_id}可以是任何字符,但换行符(\ n)。可以是空的 {var_name}可以是任何字符,但换行符(\ n)。可以是空的
匹配字符串2我使用以下内容,它在我测试的所有情况下都有效:
^cd/hl/projects/.*/var/.*/write$
到目前为止一切顺利。但是当我尝试匹配时,我失败了,而且还没有给出匹配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}
我的问题是:我采取了正确的方法吗?我错过了什么?我怎样才能实现目标?
由于
答案 0 :(得分:0)
子部分不应包含/
,而不仅仅是\n
。您应该将.*
替换为[^/\n]*
并使用
REGEX 1: ^cd/hl/projects/([^/\n]*)/var/([^/\n]*)
REGEX 2: ^cd/hl/projects/([^/\n]*)/var/([^/\n]*)/write$
[^/\n]*
negated character class匹配除*
和/
以外的任何0+(由于\n
)字符。