我有一个API调用,它本质上返回托管的wiki应用程序页面的HTML。我正在做一些substr,str_replace和preg_replace kung-fu,根据我的网站样式指南进行格式化。
我做了一组调用来格式化我的左侧导航(将pageX的链接更改为我的wikiParse?page = pageX类型的东西)。我可以在左侧导航栏上安全地执行此操作。但是,在正文中,我无法安全地假设链接是指向内部页面的链接。它很可能是外部资源的链接。所以我需要做一个与href =匹配的preg_replace,后面没有http://。
这是我的抨击:
$result = preg_replace('href\=\"(?!http\:\/\/)','href="bla?id=',$result);
这似乎剥离了页面上的全部内容。有谁看到我滑倒的地方?我不认为我太远了,只是看不到下一步去哪里。
干杯
答案 0 :(得分:1)
preg_*
functions期待Perl-Compatible Regular Expressions (PCRE)。与正常正则表达式的结构差异在于表达式本身被包装到分隔符中,该分隔符将表达式与可能的modifiers分开。经典分隔符是/
,但PHP允许除反斜杠字符之外的任何其他非字母数字字符。另请参阅Intruduction to PCRE in PHP。
所以试试这个:
$result = preg_replace('/href="(?!http:\/\/)/', 'href="bla?id=', $result);
此处href="(?!http://)
是正则表达式。但是,当我们使用/
作为分隔符时,必须使用反斜杠转义正则表达式中/
的出现。
答案 1 :(得分:1)
你的正则表达式缺少开始和结束分隔符(默认情况下为'/');
$result = preg_replace('/href\=\"(?!http\:\/\/)/','href="bla?id=',$result);