Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/296.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 用于标识MQTT主题的正则表达式_C#_Regex - Fatal编程技术网

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,我使用了以下方法,并且它在我测试

我试图在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$-对吗?