Php 在正则表达式上遇到了一些麻烦

Php 在正则表达式上遇到了一些麻烦,php,regex,preg-replace,Php,Regex,Preg Replace,好的,我有这个: $fromArray = array( "/(\[color=)(.+)(\])/", "(\[\/color\])"); $toArray = array( "<span style=\"color:\\2\">", "</span>"); 通过它 发生什么事了?我对正则表达式不太熟悉,这是我的第一个正则表达式。但我就是不明白为什么它会创建出不起作用的丑陋源代码:( 有人知道吗 谢谢:) **如果有人不知道我想用它做什么(很不清楚:),这里是: 将

好的,我有这个:

$fromArray = array(
"/(\[color=)(.+)(\])/",
"(\[\/color\])");

$toArray = array(
"<span style=\"color:\\2\">",
"</span>");
通过它

发生什么事了?我对正则表达式不太熟悉,这是我的第一个正则表达式。但我就是不明白为什么它会创建出不起作用的丑陋源代码:(

有人知道吗

谢谢:)

**如果有人不知道我想用它做什么(很不清楚:),这里是:

将[color=red]翻译成
将[/color]翻译成


现在我需要分别做这些,如果我把它们作为一个正则表达式模式来做的话,它会搞乱另一个需要几天才能解释的问题:\

使用非贪婪量词:

$fromArray = array(
"/(\[color=)(.+?)(\])/",
"(\[\/color\])");

所发生的事情是,开始标记的正则表达式实际上是吞噬了开始标记、中间的东西和结束标记,因为<代码> .+/COD>是贪婪的并且尽可能地匹配,因此<>代码> \代码>实际上是在结束标记结束时与括号匹配。


非贪婪版本,
+?
,在允许正则表达式匹配的同时尽可能少地匹配,因此将确保只匹配打开的标记。

使用非贪婪量词:

$fromArray = array(
"/(\[color=)(.+?)(\])/",
"(\[\/color\])");

所发生的事情是,开始标记的正则表达式实际上是吞噬了开始标记、中间的东西和结束标记,因为<代码> .+/COD>是贪婪的并且尽可能地匹配,因此<>代码> \代码>实际上是在结束标记结束时与括号匹配。


非贪婪版本,
+?
,在允许正则表达式匹配的同时尽可能少地匹配,因此将确保只匹配打开的标记。

考虑到Amber的答案,您还可以像这样运行一行/匹配:

$subject = '[color=red]RED[b]BOLD[/b]RED[/color]';
$result = preg_replace('%\[color=([#a-g0-9]+)\](.+?)\[/color\]%im', '<span style="color:$1">$2</span>', $subject);
$subject='[color=red]red[b]BOLD[/b]red[/color];
$result=preg\u replace('%\[color=([\a-g0-9]+)\](.+?)\[/color\]%im','$2',$subject);

考虑到Amber的答案,您也可以像这样运行一行/匹配:

$subject = '[color=red]RED[b]BOLD[/b]RED[/color]';
$result = preg_replace('%\[color=([#a-g0-9]+)\](.+?)\[/color\]%im', '<span style="color:$1">$2</span>', $subject);
$subject='[color=red]red[b]BOLD[/b]red[/color];
$result=preg\u replace('%\[color=([\a-g0-9]+)\](.+?)\[/color\]%im','$2',$subject);