2013-06-11 13 views
5

Ich bin ein Rubyist, der versucht, etwas von meinem Code in PHP zu implementieren und nicht in der Lage, den entsprechenden PHP-Code für dieses bestimmte def.Can zu bekommen, jemand mir aushelfen. Danke im Voraus.was entspricht = ~ von Ruby in PHP?

def check_condition(str) 
    str =~ SOME_REGEX 
end 
+5

['preg_match()'] (http://php.net/preg-match)? – BlitZ

+0

preg_match ($ regex, $ string); – Robert

+0

@CORRUPT ist es nicht bitweise NOT Operator **? ** –

Antwort

10

In PHP sieht es so aus:

function check_condition($str) { 
    return preg_match(SOME_REGEX, $str); 
} 

Leider im Gegensatz zu einigen anderen Sprachen keine Regex-Match-Operator in PHP gibt es. Sie müssen eine Funktion aufrufen. Befolgen Sie das Handbuch von preg_match() und die Handbuchseite über das so genannte perl compatible regular expresssions (preg) im Allgemeinen.


Etwas zusätzliches. Nach dem Lesen der Handbuchseite von preg_match wissen Sie, dass die Methode eine Ganzzahl zurückgibt, die Anzahl der gefundenen Übereinstimmungen. Wenn die Methode nach der ersten Übereinstimmung zurückkehrt, kann dies nur 0 oder 1 sein. Ab dem losen Typisierungssystem von PHP würde dies wie für die Verwendung in losen Vergleichen gut sein:

if(check_condition($str)) { .... 
if(check_condition($str) == true) { ... 

Aber es wäre in einem strengen Vergleich nicht:

if(check_condition($str) === true) { ... 

Deshalb wäre es gut sein Idee, den Rückgabewert von preg_match zu werfen:

function check_condition($str) { 
    return (boolean) preg_match(SOME_REGEX, $str); 
} 

aktualisieren

Ich habe ein wenig über meinen letzten Vorschlag nachgedacht und sehe ein Problem damit. preg_match() wird eine Ganzzahl zurückgeben, wenn alles in Ordnung ist, aber Boolean FALSE, wenn ein Fehler auftritt. Zum Beispiel wegen eines Syntaxfehlers im Regex-Muster. Daher werden Sie keine Fehler bemerken, wenn Sie nur auf boolean werfen. Ich würde exceptions zu zeigen, verwenden, dass ein Fehler passiert:

function check_condition($str) { 
    $ret = preg_match(SOME_REGEX, $str); 
    if($ret === FALSE) { 
     $error = error_get_last(); 
     throw new Exception($error['message']); 
    } 

    return (boolean) $ret; 
} 
+0

danke @ hek2mgl das hat mir sehr geholfen, Regex-Implementierung in PHP zu verstehen. Ich bin in der Lage, gut damit jetzt gehen :) – vivekporwal04

+0

schön, um Ihnen zu helfen. Vielleicht werden sie den Operator '= ~' einmal implementieren. +1 für Ruby;) überprüfe mein Update. – hek2mgl

+1

ja hoffe, sie werden bald. :) – vivekporwal04

5

Werfen Sie einen Blick auf preg_match:

if (preg_match('/regex/', $string) { 
    return 1; 
} 
+0

Könnte auch einfach tun: 'return preg_match ('/ regex /', $ string)'. –

5

Ist es nicht preg_match?

function check_condition($str) { 
    return preg_match(SOME_REGEX,$str); 
} 
0

Ich glaube nicht, dass es ein Äquivalent gibt.

preg_match gibt 1 zurück, wenn das Muster dem angegebenen Betreff entspricht, 0 wenn dies nicht der Fall ist, oder FALSE, wenn ein Fehler aufgetreten ist.

=~ gibt jedoch die Position zurück, an der die Übereinstimmung beginnt, oder Null, wenn keine Übereinstimmung vorliegt. Da nil falsch ist und alle Zahlen einschließlich Null wahr sind, sind boolesche Operationen möglich.

puts "abcdef" =~ /def/ #=> 3 # don't know how to get this from a RegExp in PHP 
puts "Matches" if "abcdef"=~ /def/ #=> Matches