我正在用链接替换纯文本,但不能正确执行。
我尝试了color
函数,但似乎根本无法解决我的问题。
select('partners_vehicles.id', 'partners_vehicles.year', 'vehicle_makes.make AS `make`', 'partners_vehicles.model', 'vehicle_colors.color', 'partners_vehicles.created_at')
请注意,三个链接来自同一域/**
* Gets Sheet by its name from a Spreadsheet (by id);
* @param {String} id Spreadsheet's id;
* @param {String} name Sheet name;
* returns {Sheet} this sheet;
*/
function getSheet(id,name) {
var ss = SpreadsheetApp.openById(id);
var sh = ss.getSheetByName(name);
return sh;
}
//test function;
function testInsert() {
var sh = getSheet('yourSpreadsheetId','yourSheetName');
var data = [1,2,3,4,5,7]; //an array of values;
insert(sh,data,1);
}
/**
* Inserts values to the last row;
* @param {Sheet} sheet to use;
* @param {Array} array of values to set;
* @param {Integer} startCol column to start from;
*/
function insert(sheet,data,startCol) {
var lrow = sheet.getLastRow();
var lrange = sheet.getRange(lrow,startCol,1,data.length)
lrange.setValues([data]);
}
,因此在替换第一个链接时,其他链接也是如此。
preg_replace()
循环用于我需要为每个链接执行的功能(我不写它,因为它现在不重要了。)
我希望能够单独使用所有链接,并且共享域的链接不会互相踩踏。
我得到的输出:
$string = 'This is a message with multiple links: http://google.com http://twitter.com http://google.com/qwerty http://facebook.com http://google.com/ytrewq';
preg_match_all('/(^|\s)((http(s)?\:\/\/)?[\w-]+(\.[\w-]+)+[^\s]*[^.,\s])/u', $string, $url);
$links = $url[2];
foreach($links as $link){
$final_string = str_replace($link, '<a href="'.$link.'">'.$link.'</a>', $string);
}
echo $final_string;
我希望输出:
http://google.com
答案 0 :(得分:0)
您应该使用preg_replace_callback()
来简化操作。
尝试:
$string = 'This is a message with multiple links: ';
$string .= 'http://google.com ';
$string .= 'http://twitter.com ';
$string .= 'http://google.com/qwerty ';
$string .= 'http://facebook.com ';
$string .= 'http://google.com/ytrewq ';
$final_string = preg_replace_callback(
"/(^|\s)((http(s)?\:\/\/)?[\w-]+(\.[\w-]+)+[^\s]*[^.,\s])/",
function ( $matches ) {
$link = trim( $matches[0] );
return " <a href='$link'>$link</a>";
},
$string
);
echo $final_string;
我更改了您声明$string
的方式,只是为了使其更易于阅读,但这没关系。
另外,请注意,您不需要像正使用的u
一样在正则表达式中使用任何标志。顺便说一句,这是错误的,应该是U
,而不是u
。
希望对您有所帮助。
答案 1 :(得分:-1)
你要踢自己。
$string = 'This is a message with multiple links: http://google.com http://twitter.com http://google.com/qwerty http://facebook.com http://google.com/ytrewq';
preg_match_all('/(^|\s)((http(s)?\:\/\/)?[\w-]+(\.[\w-]+)+[^\s]*[^.,\s])/u', $string, $url);
$links = $url[2];
foreach($links as $link) {
$string = str_replace($link, '<a href="'.$link.'">'.$link.'</a>', $string);
}
echo $string;
您正在覆盖$ final_string而不是替换$ string。