Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.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
Regex模式将不同的变量分组_Regex_Regex Group - Fatal编程技术网

Regex模式将不同的变量分组

Regex模式将不同的变量分组,regex,regex-group,Regex,Regex Group,我一直很难为字符串找到合适的正则表达式模式 字符串如下所示: 0| DIMM: Hynix | Not installed | DIMM: Micron | DIMM: Hynix | 它也可以变成这样 1| Not installed | DIMM: Samsung | DIMM: Hynix | DIMM: Hynix | 而Dimm:variable可以更改为三星、海力士、美光,甚至可以不

我一直很难为字符串找到合适的正则表达式模式

字符串如下所示:

0|   DIMM: Hynix      |   Not installed    |   DIMM: Micron     |   DIMM: Hynix      |
它也可以变成这样

1|   Not installed    |   DIMM: Samsung    |   DIMM: Hynix      |   DIMM: Hynix      |
而Dimm:variable可以更改为三星、海力士、美光,甚至可以不安装。我想将每一个单独分组,如“Hynix”、“Micron”、“Samsung”和“Not installed”。我不想将DIMM:包含在其中

我已经尝试过了,但只获取了第一个变量

(Not installed|(?<=DIMM:)\s[a-zA-Z]+)
(未安装|)(?使用带后视的1个模式正则表达式
从正则表达式开始,利用注释,您还可以使用:

((?<=DIMM: )\w+|Not installed)

使用4个模式regex 我知道这不是一个很好的正则表达式,但可能会帮助您做到这一点:

\|\s*(?:DIMM: )?(.*?)\s*\|\s*(?:DIMM: )?(.*?)\s*\|\s*(?:DIMM: )?(.*?)\s*\|\s*(?:DIMM: )?(.*?)\s*\|

使用此正则表达式将为您提供4组完整的捕获内容行匹配。缺点是正则表达式非常难看。结果如下:

匹配信息

MATCH 1
1.  [11-16] `Hynix`
MATCH 2
1.  [26-39] `Not installed`
MATCH 3
1.  [53-59] `Micron`
MATCH 4
1.  [74-79] `Hynix`
MATCH 5
1.  [92-105]    `Not installed`
MATCH 6
1.  [119-126]   `Samsung`
MATCH 7
1.  [140-145]   `Hynix`
MATCH 8
1.  [161-166]   `Hynix`
MATCH 1
1.  [11-16] `Hynix`
2.  [26-39] `Not installed`
3.  [53-59] `Micron`
4.  [74-79] `Hynix`
MATCH 2
1.  [92-105]    `Not installed`
2.  [119-126]   `Samsung`
3.  [140-145]   `Hynix`
4.  [161-166]   `Hynix`
MATCH 1
1.  [11-16] `Hynix`
MATCH 2
1.  [26-39] `Not installed`
MATCH 3
1.  [53-59] `Micron`
MATCH 4
1.  [74-79] `Hynix`
MATCH 5
1.  [92-105]    `Not installed`
MATCH 6
1.  [119-126]   `Samsung`
MATCH 7
1.  [140-145]   `Hynix`
MATCH 8
1.  [161-166]   `Hynix`

使用1模式正则表达式 刚刚找到另一个正则表达式,您可以使用:

\|\s*(?:DIMM:)?\s?(\w+\s?\w+)

此正则表达式仅使用1个捕获组,它比第一个捕获组短,但它被多次用于匹配您想要的内容。因此,您必须添加更多逻辑来迭代前4个匹配,您知道它属于完整的行。结果如下:

匹配信息

MATCH 1
1.  [11-16] `Hynix`
MATCH 2
1.  [26-39] `Not installed`
MATCH 3
1.  [53-59] `Micron`
MATCH 4
1.  [74-79] `Hynix`
MATCH 5
1.  [92-105]    `Not installed`
MATCH 6
1.  [119-126]   `Samsung`
MATCH 7
1.  [140-145]   `Hynix`
MATCH 8
1.  [161-166]   `Hynix`
MATCH 1
1.  [11-16] `Hynix`
2.  [26-39] `Not installed`
3.  [53-59] `Micron`
4.  [74-79] `Hynix`
MATCH 2
1.  [92-105]    `Not installed`
2.  [119-126]   `Samsung`
3.  [140-145]   `Hynix`
4.  [161-166]   `Hynix`
MATCH 1
1.  [11-16] `Hynix`
MATCH 2
1.  [26-39] `Not installed`
MATCH 3
1.  [53-59] `Micron`
MATCH 4
1.  [74-79] `Hynix`
MATCH 5
1.  [92-105]    `Not installed`
MATCH 6
1.  [119-126]   `Samsung`
MATCH 7
1.  [140-145]   `Hynix`
MATCH 8
1.  [161-166]   `Hynix`

您的正则表达式已经很好了,我建议类似代码>((我将在C++中使用它),但现在我正在使用一个在线正则表达式测试仪实时测试它。