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

时间:2014-12-26 13:52:59

标签: php regex

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

e.g。

Dogs are scary.

将成为:

Cats are scary.

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

e.g。

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

将成为:

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

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

3 个答案:

答案 0 :(得分:1)

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

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

DEMO

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

答案 1 :(得分:0)

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

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

并替换为:

Cats

RegEx Demo

仅当外部引用时匹配文本 - 即匹配关键字dogs后的偶数引号。

答案 2 :(得分:0)

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

试试这个。cat。见。演示。

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