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的示例中,只显示逗号分隔的数字,因此我将字符类与这些数字一起使用,以尽可能多地限制可能的匹配。