Rumah >pembangunan bahagian belakang >Golang >Cara memadankan aksara antara dua kejadian rentetan yang sama tetapi rawak
php小编子墨在这里为大家介绍一种解决方案,即Cara memadankan aksara antara dua kejadian rentetan yang sama tetapi rawak。当遇到这种情况时,我们可以利用正则表达式和回溯引用来实现。首先,我们使用正则表达式捕获第一次出现的字符串,并将其存储为一个命名捕获组。然后,我们使用回溯引用来引用这个命名捕获组,并在表达式中匹配第二次出现的相同字符串。通过这种方式,我们可以轻松地匹配到这两次出现的相同字符串之间的字符。这是一个简单而有效的方法,希望能帮助到大家。
基本字符串如下所示:
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 组中的值相同。Atas ialah kandungan terperinci Cara memadankan aksara antara dua kejadian rentetan yang sama tetapi rawak. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!