卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章34712本站已运行393

如何匹配两次出现的相同但随机的字符串之间的字符

如何匹配两次出现的相同但随机的字符串之间的字符

php小编子墨在这里为大家介绍一种解决方案,即如何匹配两次出现的相同但随机的字符串之间的字符。当遇到这种情况时,我们可以利用正则表达式和回溯引用来实现。首先,我们使用正则表达式捕获第一次出现的字符串,并将其存储为一个命名捕获组。然后,我们使用回溯引用来引用这个命名捕获组,并在表达式中匹配第二次出现的相同字符串。通过这种方式,我们可以轻松地匹配到这两次出现的相同字符串之间的字符。这是一个简单而有效的方法,希望能帮助到大家。

问题内容

基本字符串如下所示:

repeatedRandomStr ABCXYZ /an/arbitrary/@#-~/sequence/of_characters=I+WANT+TO+MATCH/repeatedRandomStr/the/rest/of/strings.etc

我对这个基本字符串的了解是:

  • abcxyz 是恒定的并且始终存在。
  • repeatedrandomstr 是随机的,但它的第一次出现总是在开头和 abcxyz 之前

到目前为止,我研究了正则表达式上下文匹配、递归和子例程,但自己无法想出解决方案。

我当前工作的解决方案是首先确定 repeatedrandomstr 与什么:

^(.*)sabcxyz

然后使用:

repeatedrandomstrsabcxyzs(.*)srepeatedrandomstr

匹配我在 $1 中想要的内容。但这需要两个单独的正则表达式查询。我想知道这是否可以在一次执行中完成。

解决方法

在使用 re2 库的 go 中,除了你的方法之外没有其他方法:继续提取 abcxyz 之前的值,然后使用正则表达式来匹配两个字符串之间的字符串,如 re2 不支持也不会支持反向引用。

如果正则表达式风格可以切换到pcre或兼容,您可以使用

^(.*?)s+ABCXYZs(.*)1
^(.*?)s+ABCXYZs(.*?)1

请参阅正则表达式演示。

详细信息

  • ^ - 字符串开头
  • (.*?) - 第 1 组:除换行符之外的零个或多个字符尽可能少
  • s+ - 一个或多个空格
  • abcxyz - 一些常量字符串
  • s - 空格
  • (.*) - 第 2 组:除换行符之外的尽可能多的零个或多个字符
  • 1 - 与第 1 组中的值相同。
卓越飞翔博客
上一篇: 为什么这些元组没有正确生成?
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏