gpt4 book ai didi

字符串之间的Java模式正则表达式搜索

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:32:16 25 4
gpt4 key购买 nike

给定以下字符串 (stringToTest):

  1. G2:7JAPjGdnGy8jxR8[RQ:1,2]-G3:jRo6pN8ZW9aglYz[RQ:3,4]
  2. G2:7JAPjGdnGy8jxR8[RQ:3,4]-G3:jRo6pN8ZW9aglYz[RQ:3,4]

和模式:

Pattern p = Pattern.compile("G2:\\S+RQ:3,4");
if (p.matcher(stringToTest).find())
{
// Match
}

对于字符串 1,我不想匹配,因为 RQ:3,4 与 G3 部分关联,而不是 G2,我希望字符串 2 匹配,如 RQ:3,4与G2部分相关。

当前正则表达式的问题在于它搜索得太远并到达了RQ:3,4。最终在案例 1 中,即使我不想考虑过去的 G2 部分。

stringToTest 也有可能是(只是一个部分):

G2:7JAPjGdnGy8jxR8[RQ:3,4]

字符串 7JAPjGdnGy8jxR8jRo6pN8ZW9aglYz是可变长度的哈希值。

任何人都可以帮助我使用正确的正则表达式,开始寻找 G2 的 RQ:3,4但如果它到达字符串的末尾或 -G(下一节的开头)则停止。

最佳答案

您可以使用此正则表达式并在两者之间进行否定前瞻:

G2:(?:(?!G\d+:)\S)*RQ:3,4

RegEx Demo

正则表达式详细信息:

  • G2: : 匹配文字文本 G2:
  • (?:启动一个非捕获组
    • (?!G\d+:) : 断言我们没有 G<digit>:在我们前面
    • \S : 匹配一个非空白字符
  • )* : 结束非捕获组。匹配 0 个或多个
  • RQ:3,4 : 匹配文字文本 RQ:3,4

在 Java 中使用这个正则表达式:

String re = "G2:(?:(?!G\\d+:)\\S)*RQ:3,4";

关于字符串之间的Java模式正则表达式搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52074489/

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