Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java PIG中带双引号的正则表达式_Java_Regex_Hadoop_Mapreduce_Apache Pig - Fatal编程技术网

Java PIG中带双引号的正则表达式

Java PIG中带双引号的正则表达式,java,regex,hadoop,mapreduce,apache-pig,Java,Regex,Hadoop,Mapreduce,Apache Pig,我正在编写一个pig脚本来处理sophos代理的访问日志 每一行都像: 2015:01:13-00:00:01 AR-BADC-FAST-01 httpproxy[27983]:id=“0001”severity=“info”sys=“SecureWeb”sub=“http”name=“http access”action=“pass”method=“GET”srcip=“10.20.7.210”dstip=“10.24.2.7”user=”“ad_domain=“”statuscode=“30

我正在编写一个pig脚本来处理sophos代理的访问日志

每一行都像:

2015:01:13-00:00:01 AR-BADC-FAST-01 httpproxy[27983]:id=“0001”severity=“info”sys=“SecureWeb”sub=“http”name=“http access”action=“pass”method=“GET”srcip=“10.20.7.210”dstip=“10.24.2.7”user=”“ad_domain=“”statuscode=“302”cached=“0”profile=“REF\u DefaultHTTPProfile(默认Web过滤器配置文件)”filteraction=“REF\u defaultHttpCf”(默认内容筛选器操作)“size=“0”request=“0x9ac68d0”url=”http://www.google.com“例外情况=“av、auth、内容、url、ssl、certcheck、certdate、mime、缓存、文件扩展名”error=”“authtime=“0”dnstime=“1”cattime=“0”avscantime=“0”fullreqtime=“239428”device=“0”auth=“0”

因此,我设法用MapReduce在Java中实现了这一点,使用以下正则表达式:
\”([^\“]*)\“
获取引号之间的值,然后对其进行处理。现在我想用pig实现同样的操作,但我无法将正则表达式应用于每一行

我正在做:

input = load './http.log' as (line : chararray);
splt = foreach input generate FLATTEN(REGEX_EXTRACT_ALL(line,'(\\"([^\\"]*)\\")'));
dump splt;
splt = FOREACH A GENERATE
    FLATTEN(REGEX_EXTRACT(line,'.*url="([^"]*)".*',1)) AS url,
    FLATTEN(REGEX_EXTRACT(line,'.*fullreqtime="([^"]*)".*',1)) AS duration,
    FLATTEN(REGEX_EXTRACT(line,'.*size="([^"]*)".*',1)) AS bytes;
转储的结果是:()

我在使用REGEX_EXTRACT_ALL时遗漏了一些东西,或者我必须以不同的方式转义REGEX的某些字符


谢谢!

我用不同的方法提取了值,因为我只需要行中的一些字段

为了获得我正在做的值:

input = load './http.log' as (line : chararray);
splt = foreach input generate FLATTEN(REGEX_EXTRACT_ALL(line,'(\\"([^\\"]*)\\")'));
dump splt;
splt = FOREACH A GENERATE
    FLATTEN(REGEX_EXTRACT(line,'.*url="([^"]*)".*',1)) AS url,
    FLATTEN(REGEX_EXTRACT(line,'.*fullreqtime="([^"]*)".*',1)) AS duration,
    FLATTEN(REGEX_EXTRACT(line,'.*size="([^"]*)".*',1)) AS bytes;

然后我可以继续脚本的其余部分。

双引号在正则表达式中没有什么特殊之处,不需要引用它们;在Java中这样做只是因为在字符串文本中,必须引用它们。但是,既然PIG似乎不需要这些,只需删除反斜杠。@fge我需要正则表达式的方式是:
\([^\“]*)\”
为了获得引号之间的所有值,如下所示:。但是如果我不替换\,我会在执行pig脚本时得到:
意外字符''