我在PHP的preg_replace使用以下正则表达式:
$f[] = '/href\=\"([a-zA-Z\_]*?).php\?(.*?)\"/';
我想更新此内容以匹配以.php结尾的所有超链接(如现在这样),但排除链接中包含“phpinfo”一词的所有链接。
我试过了:
$f[]='/href\=\"([a-zA-Z\_]*?).php\?(.*?!phpinfo)\"/';
但是我担心我做错了,它没有用 - 我无法找到一个类似的例子,我能够适应这个工作。
答案 0 :(得分:1)
使用基于正面的负面预测。
$f[] = '/\bhref="([a-zA-Z\_]*?).php\?((?:(?!phpinfo|").)*)"/';
更为棘手的部分是(?:(?!phpinfo|").)*
,它匹配任何字符,但不匹配双引号或phpinfo
,零次或多次。我的意思是“不是phpinfo
”,下面的字符将是任何但不是子串phpinfo
中的起始字母,即p
。因此,仅当以下字符不能为p
时才会匹配hpinfo
。