Php Regex-仅当模式不在引号内时才替换
假设我想编写一个正则表达式,将单词Php Regex-仅当模式不在引号内时才替换,php,regex,Php,Regex,假设我想编写一个正则表达式,将单词Dog替换为单词Cat e、 g 将成为: Cats are scary. Cats are scary but my mom told me that "Dogs are cute" 但我希望这个正则表达式仅在单词Dog不在引号内时才应用 e、 g 将成为: Cats are scary. Cats are scary but my mom told me that "Dogs are cute" 我不知道怎么做。 请帮助我:)如果您运行的是perl或
Dog
替换为单词Cat
e、 g
将成为:
Cats are scary.
Cats are scary but my mom told me that "Dogs are cute"
但我希望这个正则表达式仅在单词Dog不在引号内时才应用
e、 g
将成为:
Cats are scary.
Cats are scary but my mom told me that "Dogs are cute"
我不知道怎么做。
请帮助我:)如果您运行的是perl或php,您可以使用下面使用PCRE动词的正则表达式
然后将匹配的
Dog
字符串替换为Cat
您可以使用此正则表达式进行搜索:
(?=(([^"]*"){2})*[^"]*$)Dogs
并替换为:
Cats
它仅在外部引号的情况下匹配文本,即在关键字dogs
之后匹配偶数个引号
Dogs(?=(?:[^"]*"[^"]*")*[^"]*$)
尝试此操作。替换为cat
。请参阅演示
您使用的是哪种语言?在这个特定的示例中,我使用php,但我认为它与此无关。当然,它是相关的。不同语言中使用的正则表达式的味道是不同的。某些语言不支持某些功能,例如look behind,例如
regex
不是最适合此作业的工具。它可以做到这一点,但是相应的regex
非常复杂,并且包含了所有能够处理regex
的语言都不支持的功能。我将分两步完成:首先将文本拆分为带引号或不带引号的部分(regex
可以做到这一点),然后使用简单的字符串替换函数仅对不带引号的部分进行更改。
Dogs(?=(?:[^"]*"[^"]*")*[^"]*$)