gpt4 book ai didi

regex - 捕获由单词绑定(bind)且包含特定单词的组

转载 作者:行者123 更新时间:2023-12-02 08:33:12 25 4
gpt4 key购买 nike

我想单独使用正则表达式解决以下问题:一个多行字符串,其中信息一端用 Z! 分隔,另一端用 S0634 分隔,比如:

Z! EXT .000 ...HOUSE... L24JN7   
PERSONAL COMPUTER\J\039060-L24JN7-000-*****-*****-
Payroll No.: 1
-Name:
-Folios:
-Date: 6/24/2014
-Subformat: S0634
Z! EXT .000 ...HOUSE... L24JN7
PERSONAL COMPUTER\J\039060-L24JN7-000-*****-*****-
Payroll No.: 2
-Name:
-Date: 6/24/2014
-Subformat: S0634
Z! EXT .000 ...HOUSE... L24JN7
PERSONAL COMPUTER\J\039060-L24JN7-000-*****-*****-
Payroll No.: 3
-Name:
-Folios:
-Date: 6/24/2014
-Subformat: S0634
desired content.</li>

我只想捕获由提到的双字符序列界定并包含单词 Folios 的组(中间的一组没有它,只有 2 组有)。

我知道如何分成组,也可以返回没有的组(例如 (Z!\s*EXT(?:(?!-Folios:) .)*?S0634)).然而,如何捕捉确实拥有它的群体让我不知所措。我只对正则表达式单行代码解决方案感兴趣(我知道我可以拆成组然后检查每个组)。

最佳答案

使用这个:

$regex = '~(?sm)Z!(?:(?!S0634).)*?Folios.*?S0634~';
preg_match_all($regex, $yourstring, $matches);
// See all matches
print_r($matches[0]);

the demo , 你可以看到中间组被排除在外。

输出:

Array
(
[0] => Z! EXT .000 ...HOUSE... L24JN7
PERSONAL COMPUTER\J9060-L24JN7-000-*****-*****-
Payroll No.: 1
-Name:
-Folios:
-Date: 6/24/2014
-Subformat: S0634

[1] => Z! EXT .000 ...HOUSE... L24JN7
PERSONAL COMPUTER\J9060-L24JN7-000-*****-*****-
Payroll No.: 3
-Name:
-Folios:
-Date: 6/24/2014
-Subformat: S0634
)

解释

  • (?s) 激活DOTALL 模式,允许点跨行匹配
  • (?m) 打开多行模式,允许 ^$ 在每一行上匹配
  • Z! 匹配起始分隔符
  • (?:(?!S0634).)*? 延迟匹配任何未跟随 S0634 的字符,直到...
  • 作品集
  • .*?S0634 延迟匹配字符串的其余部分,直到结束定界符

引用

关于regex - 捕获由单词绑定(bind)且包含特定单词的组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24564947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com