2015-11-26 22 views
1

我有一个在我的JavaScript应用程序上运行的正则表达式。将正则表达式从JavaScript移植到PHP

not.replace(/({[PF]}(.*?){\/[PF]})/g, '<a href="#projects/'+ project.get('slug') +'/' + project.get('uri_hash')+'">$2</a>');

基本上它查找{P}或{F}和{/ P}或{/ F}并接通这些字符之间的单词中的链接,例如。

{P}Haribo{/P}将被输出为<a href="/link/link">Haribo</a>。我想将这个功能转移到服务器上,但我很努力地将它移植到同一个表达式的PHP版本中。有谁知道如何编写PHP版本?

这里是我的尝试:

$string = $notification->notification; 
$patterns = array(
    '/{P}/', 
    '/{F}/', 
    '/{\/F}/', 
    '/{\/P}/', 
); 
$replacements = array(
    '<a href="#projects/'.$notification->relational_project->slug.'/'.$notification->relational_project->uri_hash.'">', 
    '<a href="#projects/'.$notification->relational_project->slug.'/'.$notification->relational_project->uri_hash.'">', 
    '</a>', 
    '</a>', 
); 
+0

@stribizhev编辑 – Udders

回答

0

你几乎没有。您所缺少的是致电preg_replace。如果它的第一个和第二个参数是数组,它将根据模式替换成员。所以,你的代码就变成了:

$patterns = array(
    '/{P}/', 
    '/{F}/', 
    '/{\/F}/', 
    '/{\/P}/', 
); 
$replacements = array(
    '<a href="#projects/'.$notification->relational_project->slug.'/'.$notification->relational_project->uri_hash.'">', 
    '<a href="#projects/'.$notification->relational_project->slug.'/'.$notification->relational_project->uri_hash.'">', 
    '</a>', 
    '</a>', 
); 
echo preg_replace($patterns, $replacements, $yourText); 

$yourText是在代码中的占位符变量。按照您认为合适的方式更换它。

0

这里是你更新的代码:

$re = '~{([PF])}(.*?){/\1}~'; 
$str = "{P}Haribo{/P}"; 
$slug = "link"; 
$urihash = "66"; 
$subst = '<a href="#projects/' . $slug . '/' . $urihash . '">$2</a>'; 
echo $result = preg_replace($re, $subst, $str); 

IDEONE demo

注意{([PF])}(.*?){/\1}比赛{,那么无论PF并投入1组,接着匹配},然后0个或更多字符等比一个换行符{/后面的文本存储在捕获组1中(\1是反向引用),然后关闭}

我假设你的字符串中没有嵌套[...] s。

+0

我希望这会对你有用。只需用'$ notification-> relational_project-> slug'和'$ urihash'替换'$ slug'并使用'$ notification-> relational_project-> uri_hash'。 –

相关问题