2011-09-21 58 views
6

ai đó có thể giúp tôi với thuật toán tìm vị trí xuất hiện đầu tiên của bất kỳ số nào trong chuỗi không?Tìm vị trí xuất hiện đầu tiên của bất kỳ số nào trong chuỗi (php)

Mã i tìm thấy nó trên web và không hoạt động:

function my_ofset($text){ 
    preg_match('/^[^\-]*-\D*/', $text, $m); 
    return strlen($m[0]); 
} 
echo my_ofset('[HorribleSubs] Bleach - 311 [720p].mkv'); 
+0

thử preg_match ('/ [\ d] + /', $ text, $ m); – user269867

+0

Ngoài ra, tôi thấy nó tiện dụng để sử dụng một "python regex repl" trực tuyến để kiểm tra và gỡ lỗi các biểu thức regex. Ví dụ: https://pythex.org – SherylHohman

Trả lời

12
function my_ofset($text){ 
    preg_match('/^\D*(?=\d)/', $text, $m); 
    return isset($m[0]) ? strlen($m[0]) : false; 
} 

nên làm việc cho việc này. Mã ban đầu yêu cầu - để đến trước số đầu tiên, có lẽ đó là vấn đề?

+0

nếu không có số trong chuỗi, nó trả về độ dài của chuỗi gốc? – Gasper

+0

@ gašper: Đúng vậy. Có thể được cố định, nhưng giải pháp của Stanislav là tốt hơn nhiều. –

+0

Tại sao giải pháp của anh tốt hơn? nếu không có số trong chuỗi nó trả về cho tôi 1 (với thuật toán của mình). nếu tôi sử dụng của bạn nó trả về cho tôi một cái gì đó hợp lý (chuỗi chiều dài). – Gasper

18
function my_offset($text) { 
    preg_match('/\d/', $text, $m, PREG_OFFSET_CAPTURE); 
    if (sizeof($m)) 
     return $m[0][1]; // 24 in your example 

    // return anything you need for the case when there's no numbers in the string 
    return strlen($text); 
} 
+2

Làm cho ý nghĩa hơn. Tôi (và RegexBuddy) không biết về 'PREG_OFFSET_CAPTURE' :) –

0

tôi có thể làm biểu thức thông thường nhưng tôi phải đi vào một trạng thái thay đổi để nhớ những gì nó làm sau khi tôi đã mã hoá nó.

Đây là một chức năng đơn giản PHP bạn có thể sử dụng ...

function findFirstNum($myString) { 

    $slength = strlen($myString); 

    for ($index = 0; $index < $slength; $index++) 
    { 
     $char = substr($myString, $index, 1); 

     if (is_numeric($char)) 
     { 
      return $index; 
     } 
    } 

    return 0; //no numbers found 
} 
Các vấn đề liên quan