2010-07-19 57 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之前的所有內容。