c++ - 正则表达式重复模式和不匹配组

标签 c++ regex

好吧,我完全无法重复工作,更不用说我希望它的工作方式了......

我将引入一个包含以下信息的字符串

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?比动态生成的正则表达式容易得多。

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

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

例子:

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

Regular expression visualization

Debuggex Demo

在您的示例中与 WITH 匹配。 Here's a regex101 demo.

关于c++ - 正则表达式重复模式和不匹配组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24022045/

相关文章:

Javascript 正则表达式忽略反斜杠句点要求

c++ - C++ 中的异常处理程序 catch(...)

c++ - Qt 中 `:/foo` 、 `qrc:/foo` 和 `qrc:///foo` 路径之间的区别

c++ - 单击时 QML 更改 View

C# 正则表达式不匹配字符串

regex - 为什么 Perl 正则表达式中的 * 似乎并不贪婪?

正则表达式以任意顺序匹配另一个字符串中的字符

php - 如何用单引号替换双引号

c++ - Template模板参数,为什么要强制类?

c++ - istringstream 不标记引号之间的文本