gpt4 book ai didi

正则表达式在一个搜索词之后和其他两个搜索词之一之前(以先到者为准)收集数据

转载 作者:行者123 更新时间:2023-12-01 10:52:32 25 4
gpt4 key购买 nike

我需要根据以下要求设计一个正则表达式:

给定示例文本:

SEARCH_TERM_#1 find this text SEARCH-TERM_#2_more text_SEARCH-TERM_#3
SEARCH_TERM_#1 find this text SEARCH-TERM_#3

我想提取出现在find this text区域的字符串

正则表达式应在 SEARCH_TERM_#1 之后收集数据,但不包括 SEARCH_TERM_#2SEARCH-TERM_#3,以先到者为准.它应该选择它在 #2 和 #3 中首先找到的任何内容作为“右侧”搜索边界。

我试过 (?>SEARCH_TERM_#2|SEARCH_TERM_#3) (?=(?>SEARCH_TERM_#2|SEARCH_TERM_#3))(?>(?=SEARCH_TERM_#2)|(?=SEARCH_TERM_#3)) 。他们都将第二个搜索词包含在收集的数据中并在第三个之前停止,而我希望收集的数据在 #2 或 #3 之前停止。

最佳答案

描述

这个正则表达式将:

  • 找到第一个SEARCH_TERM_#1
  • 捕获在SEARCH_TERM_#1 之后开始的文本
  • 遇到 SEARCH_TERM_#2 时停止捕获文本或 SEARCH_TERM_#3 (谁是第一个

^.*?SEARCH_TERM_\#1((?:(?!SEARCH-TERM_\#2|SEARCH-TERM_\#3).)*)

enter image description here

展开

  • ^匹配字符串的开头,这会强制搜索从开头开始
  • .*?将所有字符匹配到下一个表达式。请注意,该术语应与 s 结合使用允许点匹配换行符的选项
  • SEARCH_TERM_\#1第一个搜索词
  • (启动捕获组 这组括号将匹配的值放入捕获组 1
  • (?:启动非捕获组,这是真正的魔法,基本上允许包含的表达式继续匹配,直到它偶然发现 SEARCH-TERM_\#2SEARCH-TERM_\#3
    • (?!开始否定前瞻。想想正则表达式引擎在输入字符串中移动光标。 loohahead 只看光标后面的字符而不移动光标。否定意味着如果找到的表达式解析为匹配则拒绝匹配,或者如果未找到表达式则允许匹配。
    • SEARCH-TERM_\#2|SEARCH-TERM_\#3寻找任何一个值。 |是一个“或”语句
    • )关闭负面前瞻
    • .匹配任何字符。如果前面的否定前瞻没有找到它的搜索词,表达式只会到达这个位置
    • )关闭非捕获组,此时搜索已停止,因为它遇到了#2 或#3 结束条件,或者非捕获组找到了单个字符
  • *继续贪婪地匹配所有字符。您可以使用贪心,因为结束条件包含在表达式中。
  • )关闭捕获组

    PHP代码示例

您没有指定语言,所以我包含这个 PHP 示例只是为了展示它是如何工作的。

输入文本

skip this text SEARCH_TERM_#1 find this text SEARCH-TERM_#2 more text to ignore SEARCH_TERM_#3

代码

<?php
$sourcestring="your source string";
preg_match('/^.*?SEARCH_TERM_\#1((?:(?!SEARCH-TERM_\#2|SEARCH-TERM_\#3).)*)/ims',$sourcestring,$matches);
echo "<pre>".print_r($matches,true);
?>

匹配

$matches Array:
(
[0] => skip this text SEARCH_TERM_#1 find this text
[1] => find this text
)

现实世界的例子

或者使用评论中包含的真实示例:

正则表达式:^.*?style="background-image: url\(((?:(?!&cfs=1|\)).)*)

输入文本:<a href=http://i.like.kittens.com style="background-image: url(http://I.like.kittens.com?Name=Boots&cfs=1)">

匹配:

[0] => <a href=http://i.like.kittens.com style="background-image: url(http://I.like.kittens.com?Name=Boots
[1] => http://I.like.kittens.com?Name=Boots

免责声明

这看起来像是使用正则表达式解析 HTML 时的常见问题。如果您的输入文本是 HTML,那么您应该调查使用 HTML 解析工具而不是正则表达式。

关于正则表达式在一个搜索词之后和其他两个搜索词之一之前(以先到者为准)收集数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17253103/

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