试图获取正则表达式以查找包含不包含单词的参数的所有超链接

时间:2015-08-07 14:53:53

标签: php regex

我在PHP的preg_replace使用以下正则表达式:

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

我想更新此内容以匹配以.php结尾的所有超链接(如现在这样),但排除链接中包含“phpinfo”一词的所有链接。

我试过了:

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

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

1 个答案:

答案 0 :(得分:1)

使用基于正面的负面预测。

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

DEMO

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