繁体   English   中英

正则表达式 - 仅当模式不在引号内时才替换

[英]Regex - Replace only if the pattern is not inside a quote

假设我想写一个正则表达式来用单词Cat替换单词Dog

例如

Dogs are scary.

会变成:

Cats are scary.

但我希望只有在单词 Dog 不在引号内时才应用此正则表达式。

例如

Dogs are scary but my mom told me that "Dogs are cute"

会变成:

Cats are scary but my mom told me that "Dogs are cute"

我不知道该怎么做。 请帮帮我 :)

如果您正在运行perl或php,则可以使用下面的正则表达式,该正则表达式使用PCRE动词(*SKIP)(*F)

"[^"]*"(*SKIP)(*F)|Dog

DEMO

然后将匹配的Dog字符串替换为Cat

您可以使用此正则表达式进行搜索:

(?=(([^"]*"){2})*[^"]*$)Dogs

并替换为:

Cats

正则演示

它仅在引号外匹配文本,即匹配关键字dogs后的双引号。

Dogs(?=(?:[^"]*"[^"]*")*[^"]*$)

试试看。用cat代替。请参阅演示。

https://regex101.com/r/dU7oN5/25

对于更完整的功能,如果您需要变量来控制替换,请参阅https://stackoverflow.com/a/69428257/1432181了解类似问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM