有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出


Is there a way I can extract text from between 2 tags, and have output in a format of my choosing?

有没有一种方法可以从两个标签之间提取文本,并以我选择的格式输出?有什么应用程序或脚本可以做到这一点吗?

例如:

[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