2013-06-11 4 views
5

Sono un Rubyist cercando di attuare alcuni del mio codice in PHP e non in grado di ottenere il codice PHP equivalente per questo particolare def.Can qualcuno mi può aiutare out.Thanks in anticipo.cos'è l'equivalente di = ~ di ruby ​​in php?

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

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

+0

preg_match ($ regex, $ stringa); – Robert

+0

@CORRUPT non è forse NON bit a bit operatore **? ** –

risposta

10

In PHP Assomiglia:

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

purtroppo non c'è nessun operatore regex-partita in PHP a differenza di alcuni altri linguaggi. Dovrai chiamare una funzione. Seguire il manuale di preg_match() e la pagina di manuale sul cosiddetto perl compatible regular expresssions (preg) in generale.


Qualcosa in più. Dopo aver letto la pagina di manuale di preg_match sai che il metodo restituisce un numero intero, il numero di corrispondenze trovate. Poiché il metodo ritorna dopo la prima corrispondenza, questo può essere solo 0 o 1. A partire dal sistema di tipizzazione libera del PHP questo sarebbe un bene per il suo utilizzo in confronto sciolto come:

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

Ma non avrebbe funzionato in un rigoroso confronto:

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

Quindi sarebbe una buona idea di lanciare il valore di ritorno di preg_match:

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

Aggiornamento

ho pensato un po 'sul mio ultimo suggerimento e vedo un problema con questo. preg_match() restituirà un intero se tutto funziona bene, ma booleano FALSE se si verifica un errore. Ad esempio a causa di un errore di sintassi nel modello regex. Pertanto non sarai a conoscenza di errori se stai semplicemente lanciando su boolean. Vorrei usare exceptions per mostrare che un errore è stato accadendo:

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

grazie @ hek2mgl questo mi ha aiutato molto a capire l'implementazione delle espressioni regolari in php.Io sono in grado di andare bene con questo ora :) – vivekporwal04

+0

bello per aiutarti. Forse implementeranno una volta l'operatore '= ~'. +1 per rubino;) controlla il mio aggiornamento. – hek2mgl

+1

sì spero lo faranno presto. :) – vivekporwal04

5

Dai un'occhiata alla preg_match:

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

Si può anche solo fare: 'return preg_match ('/ regex /', $ string)'. –

5

Non è forse preg_match?

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

Non penso che ci sia un equivalente.

preg_match restituisce 1 se il modello corrisponde all'oggetto specificato, 0 se non lo è, o FALSE se si è verificato un errore.

=~ tuttavia restituisce la posizione in cui inizia la partita, o nullo se non v'è alcuna corrispondenza. Poiché nil è falso e tutti i numeri compreso lo zero sono veri, le operazioni booleane sono possibili.

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