【发布时间】:2017-10-26 19:00:44
【问题描述】:
我有一个软件,给定一个正则表达式,可以执行查找和替换。它不是一种编码语言,因此除了正则表达式之外没有其他建议有用。我一直在寻找一个可以帮助我找到所有文本 except“模式”的表达式。模式不一定在字符串的开头或结尾,并且可以出现多次。给定字符串:
red blue yellow green orange purple blue black green white
和一个模式:
blue.*?green
一个出现两次的模式,我试图选择除此之外的所有内容。 (以删除选定的并只留下模式)。 我试过了:
FIND - ".*?(blue.?green)"
REPLACE - "$1",
但最后仍然留下“白色”。任何帮助,将不胜感激。
【问题讨论】:
-
我认为
.?是一个错字,应该是.+?。如果您不使用 .*?这给了你什么?通过消除过程,您最后需要一个.*?对吗?嗯,几乎是对的。正则表达式末尾的.*?不会匹配任何内容,因为它不必匹配。另一方面,.*会匹配。我想最大的问题是为什么你在开头使用.*?而不是.*。如果蓝色和绿色是分隔符,那么 first 和 last found 呢? -
抱歉,是的,这是一个错字。如果你去掉开头的“.*?”它只是将模式替换为自身 - 因此不会更改文本。如果我在前面使用 .* - 它是贪婪的并且匹配所有内容直到第二个实例 - 所以你失去了第一个模式匹配。