PHP regex ve bir dize değişkenleri karşılaştırmak

2 Cevap php

i zor bir sorun var ve ben şaşırıp gibi görünüyor. Ben devam etmek nasıl bir fikrim var ama hiçbir fikrim nasıl pratikte bunu yapmak için.

Ben ne yapmak istiyorum (regex ve değişkenleri kullanarak?) Başka bir biçime içeride. Txt dosyası bir dize dönüştürmek. I / / yorumlar ile işaretlenmiş bu satırları dönüştürmek gerektiğinde ana sorundur.

NOTE: "... x $ çağırır villainx" orijinal farklı hesaplanır ve formatta o dönüştürülmesi gerekir. Ve ben bazı ciddi yardıma ihtiyacım var bir sorun.

Example: This needs to be converted...

HERO posts small blind $0.50.
villain4 posts big blind $1.00.    
** Dealing down cards **
Dealt to HERO [  7s 8c 5d 8d ]
villain1 calls $1.00
villain2 raises to $3.00 // total sum a player raises to
villain3 calls $3.00
HERO calls $3.00
villain4 calls $3.00
villain1 calls $3.00     // total sum a player calls whether he has put money in to the pot before (as he has -- $1 call, first to act)
** Dealing Flop ** [ 9c, Ah, Jh ]

... Bunun için:

HERO posts small blind [$0.50 USD].
villain4 posts big blind [$1.00 USD].    
** Dealing down cards **
Dealt to HERO [  7s 8c 5d 8d ]
villain1 calls [$1.00 USD]
villain2 raises [$3.00 USD] // total sum a player raises to
villain3 calls [$3.00 USD]
HERO calls [$2.50 USD]      // a sum player calls = last raise ($3) - money put in (=$0.50 small blind)
villain4 calls [$2.00 USD]  // $3 - $1 (big blind)
villain1 calls [$2.00 USD]  // $3 - $1 (the call first to act)
** Dealing Flop ** [ 9c, Ah, Jh ]

Başka bir örnek:

HERO posts small blind $0.50.
villain4 posts big blind $1.00.    
** Dealing down cards **
Dealt to HERO [  7s 8c 5d 8d ]
villain1 bets $5.50
villain2 raises to $20.00
villain3 raises to $40.00
villain1 calls $40.00 //THIS NEEDS TO BE "calls $34.50"
villain2 calls $40.00 //THIS NEEDS TO BE "calls $20.00"
** Dealing Flop ** [ 9c, Ah, Jh ]

ve burada bütün el görünmelidir nasıl tam bir örnek bulunuyor. Txt dosyası eller yüzlerce içerebilir. Ben temelde tüm diğer sorunları preg_replace ancak yukarıda ki başardınız. Ben kayboldum. Lütfen bana yardım edin! : D

***** Hand History for Game 335502358 ***** (Full Tilt)
$100.00 USD PL Omaha - Thursday, October 15, 01:32:21 ET 2009
Table Foxtrot (Real Money)
Seat 3 is the button
Seat 1: villain1 ( $38.50 USD )
Seat 2: villain2 ( $99.65 USD )
Seat 3: villain3 ( $415.55 USD )
Seat 4: HERO ( $99.00 USD )
Seat 6: villain4 ( $171.20 USD )
HERO posts small blind [$0.50 USD].
villain4 posts big blind [$1.00 USD].
** Dealing down cards **
Dealt to HERO [  7s 8c 5d 8d ]
villain1 calls [$1.00 USD]
villain2 raises [$3.00 USD]
villain3 calls [$3.00 USD]
HERO calls [$2.50 USD]
villain4 calls [$2.00 USD]
villain1 calls [$2.00 USD]
** Dealing Flop ** [ 9c, Ah, Jh ]
HERO checks
villain4 checks
villain1 checks
villain2 bets [$8.00 USD]
villain3 folds
HERO folds
villain4 calls [$8.00 USD]
villain1 folds
** Dealing Turn ** [ Th ]
villain4 checks
villain2 bets [$13.00 USD]
villain4 calls [$13.00 USD]
** Dealing River ** [ 3c ]
villain4 checks
villain2 checks
villain2 shows [Qc, Js 8s Qd ]
villain4 shows [Kh, Tc 7h Kd ]
villain4 wins $54.15 USD from main pot

benim gerçek soruyu netleştirmek eklendi NOT: 1 Düzenlemek

düzenleme 2: Başka bir örnek eklendi

2 Cevap

Eğer dolar değeri çekin ve bir preg_replace ile dize yeniden düzenlemek için bir preg_match kullanabilir miyim?

$regex = '/(\$[0-9.]+)/';

$matched = preg_match($regex, $stringToMatch, $matches);

if($matched > 0)
{
  $output string = preg_replace($regex, '['.$matches[0].' USD]', $stringToMatch);
}

Bu yapmayacağım tek şey ilk [basit strpos ($ stringToMatch, 'Koltuk') bu filtre gerekebilir, böylece her 'koltuk' ilan başında satırları görmezden olduğu harika şık değil, orada yeterli olabilir olsa].

Tamam, başka bir gitmek gerekir. Bu php / psuedocode şey bir tür yazılmış olacaktır.

while($line = get the next line)
{
    if($line contains 'seat')
    {
        $player = get player from $line
        $pool = get player pool from $line

        $bettingMatrix[$player]['pool'] = $pool;
    }
    else if($line contains 'blind')
    {
        $player = get player from $line
        $betValue = get blind value from $line

        $bettingMatrix[$player]['betTotal'] = $betValue
        $bettingMatrix['pot'] += $betValue //keep a sum of the pot
    }
    else if($line contains 'raises')
    {
        $player = get player from $line
        $betValue = get value from $line
        $betMade = $betValue - $bettingMatrix[$player]['betTotal']; //actual amount raised by
        $bettingMatrix[$player]['betTotal'] = $betValue //$line contains total bet this hand (shortcut)
        $bettingMatrix['raiseValue'] = $betMade
        $bettingMatrix['pot'] += $betMade //keep a sum of the pot
    }
    else if($line contains 'calls')
    {
        $player = get player from $line
        //if player has called, can work out bet from raiseValue
        $betMade = $bettingMatrix['raiseValue']
        $bettingMatrix[$player]['betTotal'] += $betMade
        $bettingMatrix['pot'] += $betMade //keep a sum of the pot
    }
    else if(substr($line, 0, 3) == ' Wins ') //probably do something about players named Wins :)
    {
        //assume all bets resolved
        foreach($bettingMatrix[$player]) 
        {
            update pool.
            zero betTotal
        }
        zero pot, zero raiseValue
    }
}

eee, bu oldukça kaba ve hazır, ve muhtemelen gibi bir Parser sınıfı onu olmaz, ama sadece size gereken tüm değerlerini dışarı çalışır, ben zaten düşünüyorum. 2 $ betMade değişkenleri istediğiniz değerleri ile bitmelidir.

Düzenleme: Ben sadece kimse yükseltir ve herkes sadece aramaları veya kıvrımlar (ve herkes sadece kıvrımlar veya ne olursa olsun eğer muhtemelen korkunç ölür) ise oldukça iş değil fark ettik. Bu biraz daha çalışması gerek yok, ama genel özü - bir buçuk-cevap diyoruz. Özür dilerim.