我是RegExp的新手,但我做了一些基础教程。从下面,我需要能够提取以下内容。您的帮助将提高我对RegExp的理解。
提取字符串:
2016-02-17 19:59:18,182 GMT [transaction-Id=47ad8e96-1db8-4b41-85e5-9256fca485ab] [request_uri=/mydevice/2232234] [] INFO Response:{"executionTimeInMillis":54,"transactionId":"3191569800","success":false,"internalTransactionId":"47ad8e96-1db8-4b41-85e5-9256fca485ab","operationResults":[{"operation":"addDevice","code":"409","message":"Cannot add device"}]}
要提取的输出字符串值:
{"operation":"addDevice","code":"409","message":"Cannot add device"}
发布于 2016-02-18 06:11:47
transaction-Id=(.*?)].*?request_uri=(.*?)].*?"operationResults":[(.*?)]
抽取$0,$1,$2
发布于 2016-02-18 06:37:37
Perl代码:
#!/usr/bin/perl
use strict;
use warnings;
my $string = '2016-02-17 19:59:18,182 GMT [transaction-Id=47ad8e96-1db8- 4b41-85e5-9256fca485ab] [request_uri=/mydevice/2232234] [] INFO Response:{"executionTimeInMillis":54,"transactionId":"3191569800","success":false,"internalTransactionId":"47ad8e96-1db8-4b41-85e5-9256fca485ab","operationResults":[{"operation":"addDevice","code":"409","message":"Cannot add device"}]}';
if($string =~ /(?:transaction\-Id=)(.*)\] \[(?:request_uri=\/mydevice\/)(.*)\] \[.*(?:operationResults.:\[)(.*)\]\}$/ig){
print "$1\n$2\n$3\n";
}
else{
print "no match\n";
}
发布于 2016-02-18 18:19:57
(?<=[\/=\[])([^\/=\[]+)(?=\])
如果你想要参考匹配,(?<=[\/=\[])[^\/=\[]+(?=\])
如果你不想。
"22xs32234“预期结果正确吗?因为"2232234“是原来的字符串。如果是,那么这些表达式还没有准备好。
另一种运行步骤较少的解决方案(更快,但发现它返回了您不想要的整个URI ):(?<=transaction-Id=|request_uri=|operationResults.:\[)[^\]]+
最后是最后一个固定版本(比第一个版本更快):(?<=transaction-Id=|request_uri=|operationResults.:\[)(?:\/[^\]]+\/)?([^\]]+)
https://stackoverflow.com/questions/35474024
复制相似问题