2013-03-14 103 views
0

我想下面的文本匹配:组重复正则表达式?

PokerStars Hand #95528134282: Tournament #2013004001, $0.10+$0.01 USD Hold'em No Limit - Level VI (100/200) - 2013/03/14 15:35:36 WET [2013/03/14 11:35:36 ET] 
Table '2013004001 5898' 9-max Seat #1 is the button 
Seat 1: Pucharrin (7250 in chips) 
Seat 2: pahol (24180 in chips) 
Seat 3: dno16 (2000 in chips) 
Seat 4: sogd20i07 (150 in chips) is sitting out 
Seat 5: koaollie (13680 in chips) 
Seat 6: vovik770 (6307 in chips) 
Seat 7: gab341978 (6920 in chips) 
Seat 8: 19gow63 (1000 in chips) 
Seat 9: pokerplayer (9048 in chips) 
pahol: posts small blind 100 
dno16: posts big blind 200 
*** HOLE CARDS *** 
Dealt to pokerplayer [3s 9d] 
sogd20i07: folds 
koaollie: folds 
vovik770: folds 
gab341978: folds 
19gow63: raises 800 to 1000 and is all-in 
pokerplayer: folds 
Pucharrin: folds 
pahol: raises 1000 to 2000 
dno16: calls 1800 and is all-in 
*** FLOP *** [4s 7c Ah] 
*** TURN *** [4s 7c Ah] [Qs] 
*** RIVER *** [4s 7c Ah Qs] [Ks] 
*** SHOW DOWN *** 
pahol: shows [Qc Qd] (three of a kind, Queens) 
dno16: shows [6h 2h] (high card Ace) 
pahol collected 2000 from side pot 
19gow63: shows [Kd 2s] (a pair of Kings) 
pahol collected 3000 from main pot 
19gow63 re-buys and receives 1000 chips for $0.10 
dno16 re-buys and receives 2000 chips for $0.20 
*** SUMMARY *** 
Total pot 5000 Main pot 3000. Side pot 2000. | Rake 0 
Board [4s 7c Ah Qs Ks] 
Seat 1: Pucharrin (button) folded before Flop (didn't bet) 
Seat 2: pahol (small blind) showed [Qc Qd] and won (5000) with three of a kind, Queens 
Seat 3: dno16 (big blind) showed [6h 2h] and lost with high card Ace 
Seat 4: sogd20i07 folded before Flop (didn't bet) 
Seat 5: koaollie folded before Flop (didn't bet) 
Seat 6: vovik770 folded before Flop (didn't bet) 
Seat 7: gab341978 folded before Flop (didn't bet) 
Seat 8: 19gow63 showed [Kd 2s] and lost with a pair of Kings 
Seat 9: pokerplayer folded before Flop (didn't bet) 

而且我想捕捉开始“座位somenumber:someplayername(somenumber筹码)someoptionaltext”线为一组。 我尝试以下的正则表达式:

PokerStars.*?Level .+? \(\d+\/(\d+)\) (?:.|\s)*?((?:Seat \d+: .*? \(\d+ in chips\)(?:.|\s)*?)+)(?:.|\s)*?(.*?) collected (\d+) 

但它仅捕获第一次出现 “座位1:(在芯片7250)Pucharrin”。

我该如何改变它来捕捉组?

谢谢。

+0

你尝试尝试'preg_match_all'? – 2013-03-14 16:15:09

+0

哪种语言?例如,JavaScript,Perl,...? – guypursey 2013-03-14 16:16:35

+0

你使用什么技术? – sp00m 2013-03-14 16:16:42

回答

0

这里是一个正则表达式,它捕获您需要的数据。当您指定这些元素的语法/排序,我可以改造为您

(Seat\s(\d)+:\s+([\w\d\-\_\.]+)\s+\((\d+)\s+in\s+chips\)(.*))

我用你的服务和输入测试,似乎很好地工作。

- 编辑 -

除非你想整个块开始PokerStars并在最后) 那么也许停止:

if (preg_match('/((?:PokerStars.*\s*Table.*[\r\n]*)(?:Seat.*\s+)+)/i', $subject, $regs)) { 
    $result = $regs[0]; 
} else { 
    $result = ""; 
} 
+0

但是我也希望将星星的开始与“Pokerstars”相匹配。如果我将这个正则表达式更改为此Pokerstars(?:。| \ s)*?(Seat \ s(\ d)+:\ s +([\ w \ (*。)+)(s + \((\ d +)\ s + in \ s + chips \)(。*))它不会匹配 – dmz73 2013-03-14 16:36:40

+0

请提供您想要的明文结果这样我就可以尝试调整正则表达式 – 2013-03-15 07:00:07