gpt4 book ai didi

regex - 从 perl 搜索中排除单个模式并替换为单词边界匹配

转载 作者:行者123 更新时间:2023-12-04 05:57:26 26 4
gpt4 key购买 nike

询问后this perl newbie question ,我有一个perl新手跟进。我发现了一种情况,在我的应用程序中使用单词边界失败,该应用程序执行此正则表达式搜索并替换一组文件:

s/\bcat\b/cat_tastic/g

这就是我也希望 -cat 不是替换的匹配项,尽管它目前是匹配项,因为连字符被视为单词边界。我已经阅读了单词边界,但我学到的是,在使用\b 时对边界条件进行更改并非易事。如何从搜索和替换中排除“-cat”?所以最终的结果是:
:cat { --> :cat_tastic {
:catalog { --> no change
-cat { --> no change

这不一定是单行搜索和替换的一部分,它也可以是搜索和替换之前的条件,它控制是否执行搜索和替换,尽管在搜索和替换中使用它会最有用.

最佳答案

这不是一个新手正则表达式,但它似乎最适合您的模式:使用“否定后视”表达式,说“我想要我匹配的东西不要跟随连字符:

s/(?<!-)\bcat\b/cat_tastic/g

附录:这可以完成工作,但更通用的方法(也可移植到具有较少花哨的正则表达式的语言)是将此类问题分为两个:不是连字符之后的 cat ,或字符串开头的 cat :
s/([^-])\bcat\b|^\bcat\b/\1cat_tastic/g

或者更好:
s/([^-]|^)\bcat\b/\1cat_tastic/g

关于regex - 从 perl 搜索中排除单个模式并替换为单词边界匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9340960/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com