我有一个表达式[text][id]
,应替换为链接<a href='id'>text</a>
解决方案是(id
是整数)
$s = preg_replace("/\[([^\]]+)(\]*)\]\[([0-9]+)\]/","<a href='$3'>$1$2</a>",$string);
但是,在某些情况下(并非总是如此!),表达式可能如下所示
[text][id][type]
在这种情况下应将其替换为<a href='id' class='type'>text</a>
有想法吗?
参考方案
使用preg_replace_callback函数的解决方案:
$str = 'some text [hello][1] some text [there][2][news]'; // exemplary string
$result = preg_replace_callback('/\[([^][]+)\]\[([^][]+)\](?:\[([^][]+)\])?/',function($m){
$cls = (isset($m[3]))? " class='{$m[3]}'" : ""; // considering `class` attribute
return "<a href='{$m[2]}'$cls>{$m[1]}</a>";
},$str);
print_r($result);
输出(作为网页源代码):
some text <a href='1'>hello</a> some text <a href='2' class='news'>there</a>
(?:\[([^][]+)\])?
-考虑可选的第三个捕获组(用于类属性值)
我想在PHP中删除html字符串(始终是一个段落)的整个第一个元素。我目前的方法是使用:$passage = preg_replace('/.*?\b'.'</p>'.'\b/s', '', $passage, 1); 由于</p>中的特殊字符,此方法不起…
PHP:Preg_replace,单词边界和非单词字符 - php我需要替换文本中以井号(#)开头的单词。好吧,我知道如何替换整个单词。preg_replace("/\b".$variable."\b/", $value, $text);由于该\ b修饰符仅接受单词字符,因此不会替换包含井号的单词。我有这个html,其中包含#companyName类型的变量,我将其替换为一个值。 参…
PHP preg_replace替换数字以及特殊字符 - php我有以下PHP代码可从变量中删除特殊字符;<?php $name = "my%^$@#name8"; $patterns = array( '/\s+/' => '_', '/&/' => 'and', '/[^[:alph…
php preg_replace两个或更多空格 - php我正在寻找替换多个空格字符的实例。我最初的搜索似乎都集中在使用/s,但这包括换行符和其他空格我认为应该接近吗?用一个空格替换两个或更多实例空格" "preg_replace('/ {2,}/', ' ', $string); 参考方案 尝试一下:preg_replace('/\s\s+/&…
PHP preg_replace和号 - php好吧,我可能不会以正确的方式解决这个问题,但是这里就来了。我有这个带链接的字符串,并提取标签之间的文本...$string = $item; $pattern = '/\<a([^>]*)\>([^<]*)\<\/a\>/i'; $replacement = '$2'; $messa…