0

我试图匹配字符串“.php”,但只有当“share”不在“.php”前面时。因此,例如,应该找到“test.php”,但应该跳过“share.php”。

我有这个正则表达式,但当我认为它应该工作时它似乎不起作用。我觉得 ”。” 是什么让我搞砸了。

(?!.*share)\.php

任何人都可以提供一些帮助吗?

4

4 回答 4

9

您的负面回溯断言被错误地框定。以下应该工作

(?<!share)\.php
于 2013-05-16T17:45:31.713 回答
2

这些是 100% 确认的工作解决方案:

如果您使用的是 Visual Studio,这是实现此目的的代码:

~(share)\.php

如果您只是在寻找一个典型的 RegEx(不是使用 Visual Studio),这可以:

(?<!share)\.php

感谢大家的投入!

丹尼斯

于 2013-05-16T19:05:25.703 回答
0

看起来您正在尝试使用负前瞻。这种情况下的正确正则表达式是:

^(?!share)[^.]+\.php$

现场演示:http ://www.rubular.com/r/wFmMH8E2WI

使用后视:

^[^.]+(?<!share)\.php$
于 2013-05-16T17:53:28.430 回答
-2
[^(share)]\.php 

那个怎么样?

如果您使用 grep,则另一种选择

ls | grep \.php$ | grep -v share\.php
于 2013-05-16T17:41:45.497 回答