我正在尝试编写一个如下所示的正则表达式,如果我有类似
的东西Hi $$var1$$ $$var2$$ how are you?
它应该给我两场比赛
$$var1$$ -1st match
$$var2$$ -2nd match
目前我已经制作了一个正则表达式/\$\$\w+\d*\W*\$\$/gi
如果两个模式不是彼此相邻的,例如:
Hi $$var1$$ and $$var2$$ how are you?
它会检测到两个匹配项,但如果这两个匹配项彼此相邻,就像第一个按空格分隔的示例一样,则会检测到$$var1$$ $$
。有人可以帮我修复这个正则表达式吗?
答案 0 :(得分:2)
\$\$\w+\d*?\W*?\$\$
^^
让\W
非贪婪,因为它会消耗$$ $$
而不是$$ and $$
,因为它无法消耗and
。请参阅演示。
答案 1 :(得分:2)
我不知道你所有的限制,但是否定课程可能更容易,更快:
\$\$[^$]+\$\$
如果在双重符号之间允许单个美元符号,那么您可以使用类似的东西来保持相同的速度:
\$\$(?:[^$]+|\$(?!\$))+\$\$
(?:[^$]+|\$(?!\$))+
匹配非$
或一个$
后面没有第二个$
(虽然此时\$\$.+?\$\$
实际上是\W*
应该更简单)。
你的正则表达式没有按预期行事的原因是\w
可能与任何美元符号匹配。因此,如果在您要匹配的模式的最后一个美元符号之间存在任何与#define VIDEO_FRAME_RATE 25.0f
while (RECORDING) {
sprintf(buffer, "Someting from a data struct that is updated\n");
fprintf(Output, buffer);
usecTosleep = (1.0f/VIDEO_FRAME_RATE) * 1000000;
usleep(usecToSleep);
}
不匹配的内容,则您的正则表达式将继续匹配,直到下一个双美元符号。