有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出?有什么应用程序或脚本可以做到这一点吗?
例如:
[b]1.[/b] [artist]Norman Bass[/artist] – How U Like Bass? (Warp Brothers Club Mix) [i](3:26)[/i]
[b]2.[/b] [artist]Rhythmkillaz[/artist] – Wack Ass M.F. (Payback Mix - Clean Version) [i](3:23)[/i]
[b]3.[/b] [artist]Mario Piu'[/artist] & [artist]DJ Arabesque[/artist] – The Vision (Vision 1 Mix) [i](3:41)[/i]
[b]4.[/b] [artist]Cosmic Gate[/artist] – Fire Wire (Club Mix) [i](2:47)[/i]
[b]5.[/b] [artist]Push[/artist] – Strange World (2000 Remake) [i](6:02)[/i]
[b]6.[/b] [artist]Cortina[/artist] – Music Is Moving (Kumara Mix) [i](3:40)[/i]
[b]7.[/b] [artist]Public Domain[/artist] – Operation Blade (Original Mix) [i](3:44)[/i]
我想提取[艺术家]标签之间的信息,并将其输出为一行,条目用逗号分隔。
有什么东西可以做到这一点吗?
在php中(使用RegEx):
<?php
function everything_in_tags($string, $tagname)
{
$pattern = "#'['s*?$tagname'b[^>]*'](.*?)'[/$tagname'b[^>]*']#s";
preg_match($pattern, $string, $matches);
return $matches[1];
}
?>
在这里,我们指定标记名&获取数据。
参考:使用php 在和之间获取everthing
在jQuery中:
var regExp = /']([^'[]+)'[/;
var matches = regExp.exec("[article]I expect five hundred dollars ($500).[/article]");
//matches[1] contains the value between the parentheses
console.log(matches[1]);
这与]
&CCD_ 2并将其记录在控制台上。
在这里,我们在字符串中搜索除[
之外的任何内容。
jQuery解决方案:fiddle
以下是Javascript中一个简单的正则表达式:
var re = /'[artist'].+?(?='['/artist'])/g,
artists = str.match(re).map(s => s.substr(8)),
output = artists.join(', ');
如果你需要更通用的东西,你可以在一个函数中封装相同的方法:
function getTag(str, tagName){
var re = new RegExp(`''[${tagName}''].+?(?=''[''/${tagName}''])`, 'g');
return str.match(re).map(s => s.substr(tagName.length + 2));
}
getTag(str, 'artist').join(', ');
»Fiddle
Regex 101:解释
我想这应该可以做到
var dataStr = "[b]1.[/b] [artist]Norman Bass[/artist] – How U Like Bass? (Warp Brothers Club Mix) [i](3:26)[/i]'n[b]2.[/b] [artist]Rhythmkillaz[/artist] – Wack Ass M.F. (Payback Mix - Clean Version) [i](3:23)[/i]'n[b]3.[/b] [artist]Mario Piu'[/artist] & [artist]DJ Arabesque[/artist] – The Vision (Vision 1 Mix) [i](3:41)[/i]'n[b]4.[/b] [artist]Cosmic Gate[/artist] – Fire Wire (Club Mix) [i](2:47)[/i]'n[b]5.[/b] [artist]Push[/artist] – Strange World (2000 Remake) [i](6:02)[/i]'n[b]6.[/b] [artist]Cortina[/artist] – Music Is Moving (Kumara Mix) [i](3:40)[/i]'n[b]7.[/b] [artist]Public Domain[/artist] – Operation Blade (Original Mix) [i](3:44)[/i]",
selected = dataStr.match(/[^']]+(?='['/a)/g).join(", ");
document.write(selected);
preg_match_all("/'[artist'](.*?)'['/artist']/", $str, $out);
For($i=0;$i<=count($out[1]);$i++){
Echo $out[1][$i] . ",";
}
http://www.phpliveregex.com/p/fBW