2010-07-19 58 views
6

使用Apache的猪和文本正则表达式匹配猪

hahahah. my brother just didnt do anything wrong. He cheated on a test? no way! 

我想匹配“哥哥只是没有做任何事。”

理想情况下,我想匹配任何以“我的兄弟”开头并以标点符号(句尾)或EOL结尾的内容。

望着猪文档,然后链接到的java.util.regex.Pattern下面,我想我应该能够使用

extrctd = FOREACH fltr GENERATE FLATTEN(EXTRACT(txt,'(my brother just .*\\p{Punct})')) as (txt:chararray); 

,但似乎匹配,直到行结束。有关进行这场比赛的任何建议?我准备拉我的头发,并拉我的头发,我的意思是切换到蟒蛇流

回答

4

默认量词是greedy。这意味着它们尽可能匹配。在这种情况下,您只想匹配到第一个标点符号。换句话说,你想尽可能少地匹配。

所以要解决你的问题,你应该让quanitifer非贪婪通过后加入?立刻道:

 
my brother just .*?\\p{Punct} 
       ^

注意的是,使用?这里是它作为量词使用不同的地方就意味着“匹配零或一个'。

+0

你介意解释贪婪的部分吗?我以为我只会从单词,任何下面的文本,直到标点符号的第一个实例进行匹配。 – 2010-07-19 21:14:28

+0

如果没有非贪婪,它与标点符号的第一个实例不匹配,而是匹配直到_last_一个。 – Wrikken 2010-07-19 21:17:45

+0

@Neil Kodner:我已经更新了答案。 – 2010-07-19 21:18:04

0

你试过:.*(my brother just .*\\p{Punct})

它看起来像你想表达的my brother部分是开始时字符串,但在你的例子中它是在字符串的中间,所以你必须考虑my brother之前的所有内容。