使用正则表达式匹配 <some_pattern>Dog<the_exact_pervious_pattern>Cat 等模式

Using regex to match with patterns like <some_pattern>Dog<the_exact_pervious_pattern>Cat

是否可以在 Perl 中编写与

这样的字符串匹配的正则表达式
<some_pattern>Dog<the_exact_pervious_pattern>Cat

或者换句话说,它将匹配 CarDogCarCatChairDogChairCat

但不与 ChairDogCarCat

将其替换为其他文本。我不关心形成 <some_pattern><the_exact_pervious_pattern> 的确切字符,我只关心它们都具有完全相同的字符。 我试过类似

s/(.*(Dog)?)Cat/replacement/g;

但我知道这会与 ChairDogCarCat 匹配,也尝试过

s/(.*)DogCat/replacement/g;

但是没用。这是我不能用正则表达式做的事情,需要其他字符串处理函数(即拆分)来实现吗? Regex 对我来说似乎总是更简单、更短的解决方案,但我不知道它是否对某些模式有限制。 提前致谢。

使用relative backreference

/(.*?) Dog \g{-1} Cat/x

这是在您不需要捕获的情况下 Dog。如果你这样做,那么再倒数一次

/(.*?)(Dog)\g{-2}(Cat)/

其中 {-2} 表示匹配与倒数第二个捕获相同的子模式。

创建一个捕获组,并用 </code> 向后引用它。你的例子:</p> <pre><code>/([A-Z][a-z]+)DogCat/

示例:

CarDogCarCat     ==> match
ChairDogChairCat ==> match
ChairDogCarCat   ==> no match