2011-10-25 153 views
0

我正在用这个正则表达式挣扎。preg_replace烦恼

$glossary_search[] = "/(^|>|\\s)".$glossary["glossary_name"]."($|<|\\s)/i"; 
$glossary_replace[] = "\$1<a href='/jargon-buster/".tapestry_hyphenate($glossary["glossary_name"]).".html' title='".$glossary["glossary_name"]."' target='_blank'>".$glossary["glossary_name"]."</a>\$2"; 

return preg_replace($glossary_search,$glossary_replace,$text); 

我试图用超链接替换产品说明中的单词。上面的代码适用于单词有空格的情况,但如果它有句号,逗号或“<”则不起作用。任何人都能发现我的错误吗

感谢, 西蒙

+0

你能提供一个简单的输入行和所需的输出吗? – FailedDev

回答

0

我想你可能需要使用preg_quotehtmlentities

$glossary_search[] = "/(^|>|\\s)".preg_quote(htmlentities($glossary["glossary_name"],ENT_COMPAT,'UTF8'))."($|<|\\s)/i"; 
$glossary_replace[] = "\$1<a href='/jargon-buster/".tapestry_hyphenate($glossary["glossary_name"]).".html' title='".$glossary["glossary_name"]."' target='_blank'>".$glossary["glossary_name"]."</a>\$2"; 

return preg_replace($glossary_search,$glossary_replace,$text); 
+0

嗨Benjie,谢谢你的输入。它确实有效,但程度与原始代码相同。当任何出现在单词后面的东西不起作用时。在它自己和它完美的作品。 – Simon

+0

你可以给出一个$ glossary变量和$ text变量的例子吗? – Benjie

+0

嗨Benji,谢谢你的回应。事实证明,在我的调试过程中,我无意中忘记了我在脚本中复制了代码。结果表明它一直在工作,但是由于它正在启动两次,所以输出错误。另一个原因是,深夜麻烦拍摄是一个糟糕的主意!再次感谢你的帮助! – Simon