好吧,我完全无法重复工作,更不用说我希望它的工作方式了......
我将引入一个包含以下信息的字符串
NETWORK;PASS;1;THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS;\r
到目前为止我有什么
(?:NETWORK;.*;(?:0|1);)([^|]*)
这给我留下了第一个匹配的 block
THIS TEXT
我想做的是设置它,这样我就可以通过编程指定要匹配的 block 。用管道分隔的文本将有 3-7 个“ block ”,根据情况我可能需要匹配其中任何一个,但一次只能匹配一个。
我想过只是复制
([^|]*)
并向除了一个之外的所有运算符添加一个不匹配的运算符,但如果我复制该组,我似乎无法让它匹配任何东西,而且我也无法让重复的运算符在该组上工作。
我有点迷茫所以如果需要澄清我会根据要求提供这可能没有意义。任何帮助表示赞赏。
最佳答案
为什么不在管道符号上拆分THIS TEXT|CAN BE|RANDOM|WITH|PIPE|SEPERATORS
?比动态生成的正则表达式容易得多。
但是如果你真的想生成一个正则表达式:
- 从
(?:NETWORK;.*;(?:0|1);) 开始
- 要获取第 n 个元素(从 0 开始索引),添加
(?:[^|]+[|]){n}
(将n
替换为数字跳过),然后是([^|]+)
例子:
(?:NETWORK;.*;(?:0|1);)(?:[^|]+[|]){3}([^|]+)
在您的示例中与 WITH
匹配。 Here's a regex101 demo.
关于c++ - 正则表达式重复模式和不匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022045/