试图获得一个正则表达式来查找所有参数不包含单词的超链接


Trying to get a regexp to find all hyperlinks with arguments that dont contain a word

我使用以下regexp与PHP的preg_replace:

$f[] = '/href'='"([a-zA-Z'_]*?).php'?(.*?)'"/';

我想更新它,以匹配所有以。php结尾的超链接(就像现在一样),但排除任何链接中有"phpinfo"这个词的链接.

我试过:

$f[]='/href'='"([a-zA-Z'_]*?).php'?(.*?!phpinfo)'"/';

但我担心我做错了,它不起作用-我还没能找到一个类似的例子,我能够适应这个工作。

使用基于负向前看的正则表达式

$f[] = '/'bhref="([a-zA-Z'_]*?).php'?((?:(?!phpinfo|").)*)"/';

演示

更棘手的部分是(?:(?!phpinfo|").)*,它匹配任何字符,但不匹配双引号或phpinfo, 0次或多次。我所说的"不属于phpinfo"的意思是,下面的字符将是任何字符,但不是子字符串phpinfo(即p)中的起始字母。因此,只有当以下字符不能为hpinfo时,才能匹配p