Php 什么定义了preg_replace()中要替换的正则表达式节?

Php 什么定义了preg_replace()中要替换的正则表达式节?,php,regex,Php,Regex,我刚开始学习PHP正则表达式。我知道如何读写它们(不过我需要我的书,因为我没有记住任何图案符号)。我真的想在我的网站上使用RegExp作为BB代码,使用preg\u replace 我理解这些参数,但我不理解的是什么定义了模式中要替换的内容?到目前为止,我所拥有的: preg_replace('/(\[url=http:\/\/.*\])/','<a href="$1">$2</a>',"[url=http://google.com]"); preg\u replace

我刚开始学习PHP正则表达式。我知道如何读写它们(不过我需要我的书,因为我没有记住任何图案符号)。我真的想在我的网站上使用RegExp作为BB代码,使用preg\u replace

我理解这些参数,但我不理解的是什么定义了模式中要替换的内容?到目前为止,我所拥有的:

preg_replace('/(\[url=http:\/\/.*\])/','<a href="$1">$2</a>',"[url=http://google.com]");
preg\u replace('/(\[url=http:\/\/.*\])/,'','',“[url=http://google.com]");
现在,我知道这可能不是最好的“安全”策略,我只是想做点事情。我匹配整个字符串。。。所以我得到了一个类似于
mysite/[url]的链接=http://google.com]

我仔细阅读了PHP手册,但在尝试吸收和理解一些东西时,我仍然感到头痛:

  • 什么定义了字符串中因模式而被替换的内容
  • 什么告诉我我的1美元和2美元等是什么

我甚至不知道它们叫什么。有人能给我解释一下吗?

相同的替换没有错误:

$BBlink = '[url=http://google.com]';

$pattern = '~\[url=(http://[^] ]+)]~';
$replacement = '<a href="$1">$1</a>';
$result = preg_replace($pattern, $replacement, $BBlink);
2) 替换

$1
指第一个捕获组


备选方案:,请参见第一个示例。

正常情况下,您什么都不懂,模式是错误的。嗯?有一场比赛,如果你是这么说的,那就没有。。。整个字符串是匹配的,所以我得到一个“.”和这个模式分隔符…这就是你的$1、$2…等等的原因吗?所以()定义捕获组,这些是你要替换的值!哦,是的。多谢各位@RickyOrder:不,它只是用来分隔模式,而不是
/
,使用
~
#
作为模式分隔符更容易,因为这样可以避免逃逸所有斜杠。@RickyOrder:是的,括号定义了捕获组+1,很好的东西。您还可以使用
(?:)
定义非捕获子组,并在冒号后使用所需的模式。这可以方便地定义一个子部分,同时关闭默认捕获行为。
~       # pattern delimiter
\[      # literal opening square bracket
url=
(       # first capturing group
http://
[^] ]+  # all characters that are not ] or a space one or more times
)       # close the capturing group
]       # literal closing square bracket
~       # pattern delimiter