首页 > 后端开发 > Golang > 正文

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

WBOY
发布: 2024-02-09 09:57:26
转载
1140 人浏览过

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

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

问题内容

基本字符串如下所示:

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

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

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

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

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

^(.*)\sabcxyz

然后使用:

repeatedrandomstr\sabcxyz\s(.*)\srepeatedrandomstr

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

解决方法

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

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

^(.*?)\s+ABCXYZ\s(.*)\1
^(.*?)\s+ABCXYZ\s(.*?)\1
登录后复制

请参阅正则表达式演示

详细信息

  • ^ - 字符串开头
  • (.*?) - 第 1 组:除换行符之外的零个或多个字符尽可能少
  • \s+ - 一个或多个空格
  • abcxyz - 一些常量字符串
  • \s - 空格
  • (.*) - 第 2 组:除换行符之外的尽可能多的零个或多个字符
  • \1 - 与第 1 组中的值相同。

以上是如何匹配两次出现的相同但随机的字符串之间的字符的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:stackoverflow.com
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!