正则表达式重复模式和非匹配组

时间:2014-06-03 18:07:36

标签: c++ regex

好的,所以我有一个重复工作的问题,更不用说我希望它的工作方式......

我将带来一个包含以下信息的字符串

NETWORK;PASS;1;THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS;\r

到目前为止我所拥有的

(?:NETWORK;.*;(?:0|1);)([^|]*)

这使我第一个匹配的块

THIS TEXT

我要做的是设置它,以便我可以以编程方式指定要匹配的块。用管道分隔的文本将包含3-7和#34;块"根据具体情况,我可能需要匹配其中任何一个,但一次只能匹配一个。

我曾考虑过复制

([^|]*)

并向除了一个之外的所有人添加一个非匹配的运算符,但是我似乎无法匹配任何内容,如果我复制该组,我也不能让重复运算符来处理该组。

我有点迷失所以如果需要澄清我可能会提出要求,这可能没有任何意义。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:2)

为什么不在管道符号上拆分THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS?比动态生成的正则表达式容易得多。

但是如果你真的想要生成一个正则表达式:

  1. (?:NETWORK;.*;(?:0|1);)
  2. 开始
  3. 要获取第n个元素(从0开始索引),请添加(?:[^|]+[|]){n}(将n替换为要跳过的数字),然后添加([^|]+)
  4. 示例:

    (?:NETWORK;.*;(?:0|1);)(?:[^|]+[|]){3}([^|]+)
    

    Regular expression visualization

    Debuggex Demo

    在您的示例中匹配WITHHere's a regex101 demo.