我使用以下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
。