PHP正则表达式问题

One*_*erd 1 php regex

我在网络文档中有一系列网址,如下所示:

<a href="somepage.php?x=some_document.htm">click here</a>
Run Code Online (Sandbox Code Playgroud)

我想要做的是替换粗体:

<a href="somepage.php?x= some_document.htm ">点击此处</a>

..使用某种加密变体(让我们说一下base64_encoding)..这样的事情:

对于每个匹配,将其转换为base64_encode(匹配)

笔记:

1.短语href ="somepage.php?x =将始终位于短语之前
.2.a double-quote(")将始终跟随短语.

我不是一个正则表达的大师 - 但我知道你们中的一些人.有什么简单的方法吗?

更新:

我通过使用Chris提交的修改版本解决了这个问题,这里是:

function encrypt_param( $in_matches ) {    
  return   'href="somepage.php?x=' . base64_encode( $in_matches[1] ) . '"';
}

$webdoc = preg_replace_callback( '/href="somepage.php\?x=([^"]+)"/',
                                 'encrypt_param', 
                                 $webdoc );
Run Code Online (Sandbox Code Playgroud)

Chr*_*cks 6

我想你正在寻找这样的东西:

function doSomething($matches) {
   return base64_encode($matches[1]);
}

preg_replace_callback('/href="somepage.php?x=([^"]+)"/', 'doSomething', $webdoc);
Run Code Online (Sandbox Code Playgroud)

preg_replace回答工作方式类似.如果你想做更精细的事情,回调将允许你这样做