使用正则表达式匹配 <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
或者换句话说,它将匹配
CarDogCarCat
ChairDogChairCat
但不与 ChairDogCarCat
将其替换为其他文本。我不关心形成 <some_pattern>
或 <the_exact_pervious_pattern>
的确切字符,我只关心它们都具有完全相同的字符。
我试过类似
s/(.*(Dog)?)Cat/replacement/g;
但我知道这会与 ChairDogCarCat
匹配,也尝试过
s/(.*)DogCat/replacement/g;
但是没用。这是我不能用正则表达式做的事情,需要其他字符串处理函数(即拆分)来实现吗? Regex 对我来说似乎总是更简单、更短的解决方案,但我不知道它是否对某些模式有限制。
提前致谢。
/(.*?) 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
是否可以在 Perl 中编写与
这样的字符串匹配的正则表达式<some_pattern>Dog<the_exact_pervious_pattern>Cat
或者换句话说,它将匹配
CarDogCarCat
ChairDogChairCat
但不与 ChairDogCarCat
将其替换为其他文本。我不关心形成 <some_pattern>
或 <the_exact_pervious_pattern>
的确切字符,我只关心它们都具有完全相同的字符。
我试过类似
s/(.*(Dog)?)Cat/replacement/g;
但我知道这会与 ChairDogCarCat
匹配,也尝试过
s/(.*)DogCat/replacement/g;
但是没用。这是我不能用正则表达式做的事情,需要其他字符串处理函数(即拆分)来实现吗? Regex 对我来说似乎总是更简单、更短的解决方案,但我不知道它是否对某些模式有限制。 提前致谢。
/(.*?) 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