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);