Regex 检查两个字符串之间是否存在特定字符串

Regex 检查两个字符串之间是否存在特定字符串,regex,pcre,Regex,Pcre,字符串: a类:12801288125513551755 | b类:13551279,78 | c类:1279383593488 我想知道如何在下一个|之前检查特定数字的存在。例如,我想检查category_b是否包含编号1279。我试过了 /(类别b:)(.*)(\b(1279)\b)(|)/ 但它与类别c完全匹配 我不知道如何放置?使其在类别b中第一次匹配1279后的下一次出现“|”时停止,因此它不会继续类别c 脚本使用的正则表达式引擎是PCRE。试试看 /(category_b:)(.*

字符串:

a类:12801288125513551755 | b类:13551279,78 | c类:1279383593488

我想知道如何在下一个
|
之前检查特定数字的存在。例如,我想检查
category_b
是否包含编号
1279
。我试过了

/(类别b:)(.*)(\b(1279)\b)(|)/

但它与
类别c
完全匹配

我不知道如何放置
使其在
类别b
中第一次匹配
1279
后的下一次出现“|”时停止,因此它不会继续
类别c

脚本使用的正则表达式引擎是PCRE。

试试看

/(category_b:)(.*?)(\b(1279)\b)/
你需要把*改成a*?这使得它不情愿而不是贪婪。一个贪婪的量词会“吃”尽可能多的东西,并且仍然匹配(因此它会超过下一个类别指示符)。一个不情愿的量词将尽可能少地“吃”并且仍然匹配(因此它将避免下一个类别,除非它必须进入它)

然而,这可能仍然有一些问题。我会进一步尝试:

/(category_b:)([0-9,]*?)(\b(1279)\b)/
这将不允许类别_b后面的字符串除了数字和逗号之外有任何内容。这将阻止在上进行匹配

category_a:1280,1288,1255,1355,1755|category_b:1355,1278,78|category_c:1279,383,593,488

为什么要使用
(|)
<代码>[0-9,]*?可以替换为
[^ |]*
,前提是所需的
1279
前面可以有多个数字和逗号。您对
(|)的理解是正确的。我已编辑以删除它。我从OP的例子中复制了这一点,直到看到你的评论,我才意识到这是无用的。我怀疑OP试图将其标记为除沫器,这实际上需要
\\
,但这将导致其失败。在OP的示例中,只显示逗号分隔的数字,因此我将字符类与这些数字一起使用,以尽可能多地限制可能的匹配。