2013-06-11 46 views
5

Tôi là một Rubyist đang cố gắng thực hiện một số mã của tôi bằng PHP và không thể lấy mã PHP tương đương cho def.Can cụ thể này có ai giúp tôi. Cảm ơn trước.tương đương với = ~ của ruby ​​trong php là gì?

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 không phải là toán tử NOT bitwise **? ** –

Trả lời

10

Trong PHP có vẻ như:

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

Đáng tiếc là không có hành regex trận đấu trong PHP không giống như một số ngôn ngữ khác. Bạn sẽ phải gọi một hàm. Thực hiện theo hướng dẫn của preg_match() và trang hướng dẫn về cái gọi là perl compatible regular expresssions (preg) nói chung.


Điều gì đó bổ sung. Sau khi đọc trang hướng dẫn sử dụng preg_match, bạn biết rằng phương thức trả về một số nguyên, số lượng các kết quả phù hợp được tìm thấy. Khi phương thức trả về sau trận đấu đầu tiên, điều này chỉ có thể là 0 hoặc 1. Tính đến hệ thống đánh máy lỏng lẻo của PHP này sẽ là tốt để sử dụng nó trong sự so sánh lỏng lẻo như:

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

Nhưng nó sẽ không làm việc trong một so sánh nghiêm ngặt:

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

Do đó nó sẽ là một tốt ý tưởng để đúc các giá trị trở lại của preg_match:

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

cập nhật

Tôi đã suy nghĩ một chút về đề xuất cuối cùng của mình và tôi thấy có vấn đề với điều này. preg_match() sẽ trả về một số nguyên nếu tất cả đều hoạt động tốt nhưng boolean FALSE nếu xảy ra lỗi. Ví dụ vì lỗi cú pháp trong mẫu regex. Do đó bạn sẽ không nhận biết được lỗi nếu bạn chỉ đang truyền tới boolean. Tôi sẽ sử dụng exceptions để chứng minh rằng một lỗi đã xảy ra:

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

nhờ @ hek2mgl điều này đã giúp tôi rất nhiều để hiểu thực hiện regex trong php.I am có thể đi tốt với điều này ngay bây giờ :) – vivekporwal04

+0

tốt đẹp để giúp bạn. Có lẽ họ sẽ từng thực hiện toán tử '= ~'. +1 cho ruby;) kiểm tra cập nhật của tôi. – hek2mgl

+1

yeah hy vọng họ sẽ sớm. :) – vivekporwal04

5

Có một cái nhìn tại preg_match:

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

Cũng có thể thực hiện: 'return preg_match ('/ regex /', $ string)'. –

5

Không phải là nó preg_match?

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

Tôi không nghĩ có tương đương.

preg_match trả về 1 nếu mẫu khớp với chủ đề cụ thể, 0 nếu không khớp hoặc FALSE nếu xảy ra lỗi.

=~ tuy nhiên trả về vị trí nơi trận đấu bắt đầu hoặc không có nếu không có kết quả trùng khớp. Vì nil là false và tất cả các số bao gồm số không là đúng, các phép toán boolean là có thể.

puts "abcdef" =~ /def/ #=> 3 # don't know how to get this from a RegExp in PHP 
puts "Matches" if "abcdef"=~ /def/ #=> Matches 
Các vấn đề liên quan