我有一个文件,其格式如下:
数据 数据 数据 [开始] 我想要的数据 [结束] 数据
我想使用正则表达式从[开始]
和[结束]
标记之间提取我想要的数据
。 请问有人能告诉我如何实现吗?
\[start\](.*?)\[end\]
这将在截取内部将文本置于中间。
\[start\]\s*(((?!\[start\]|\[end\]).)+)\s*\[end\]
希望这能成功删除 [start]
和 [end]
标记。
[start]
或 [end]
时崩溃。 总是考虑边缘情况并预先处理它们是很好的。 - Alex W$text ="Data Data Data start Data i want end Data";
($content) = $text =~ m/ start (.*) end /;
print $content;
我曾经有过类似的问题,而且我可以告诉你这种方法是有效的...
i
修饰符来实现。$ echo "Data Data Data [Start] Data i want [End] Data" \
| perl -ne '/\[start\](.*?)\[end\]/i; print "$1\n"'
Data i want
?
量词,它可以关闭捕获匹配的贪婪性。例如,如果你有一个不匹配的[end]
标签:Data Data [Start] Data i want [End] Data [end]
Data i want [End] Data
如果您保证每个开始标记都有一个结束标记,那么以下方法可以实现。
\[start\](.*?)\[end\]
[start] sometext [start] sometext2 [end] sometext [end]
如果你使用正则表达式,可能会遇到问题。
现在,以下示例将提取页面中的所有热门链接:
'/<a(.*?)a>/i'
'<a></a>'
因此,这是一个复杂的问题,不能仅仅用简单的答案来解决。
使用Perl,您可以用()将所需数据括起来,稍后再提取出来,其他语言可能也有类似的功能。
if ($s_output =~ /(data data data data START(data data data)END (data data)/)
{
$dataAllOfIt = $1; # 1 full string
$dataInMiddle = $2; # 2 Middle Data
$dataAtEnd = $3; # 3 End Data
}
读取方括号[]中的文本,例如[Start]和[End],并使用值列表验证数组。jsfiddlehttp://jsfiddle.net/muralinarisetty/r4s4wxj4/1/
var mergeFields = ["[sitename]",
"[daystoholdquote]",
"[expires]",
"[firstname]",
"[lastname]",
"[sitephonenumber]",
"[hoh_firstname]",
"[hoh_lastname]"];
var str = "fee [sitename] [firstname] \
sdfasd [lastname] ";
var res = validateMeargeFileds(str);
console.log(res);
function validateMeargeFileds(input) {
var re = /\[\w+]/ig;
var isValid;
var myArray = input.match(re);
try{
if (myArray.length > 0) {
myArray.forEach(function (field) {
isValid = isMergeField(field);
if (!isValid){
throw e;
}
});
}
}
catch(e) {
}
return isValid;
}
function isMergeField(mergefield) {
return mergeFields.indexOf(mergefield.toLowerCase()) > -1;
}