Найти позицию первого вхождения любого числа в строке (php) - PullRequest
8 голосов
/ 21 сентября 2011

Может кто-нибудь помочь мне с алгоритмом нахождения позиции первого вхождения любого числа в строке?

Код я нашел его в Интернете и не работает:

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

Ответы [ 4 ]

19 голосов
/ 21 сентября 2011
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);
}
15 голосов
/ 21 сентября 2011
function my_ofset($text){
    preg_match('/^\D*(?=\d)/', $text, $m);
    return isset($m[0]) ? strlen($m[0]) : false;
}

должно работать для этого.Оригинальный код требовал - перед первым номером, возможно, в этом была проблема?

9 голосов
/ 30 марта 2018

Встроенная функция PHP strcspn() будет делать то же самое, что и функция в ответе Станислава Шабалина, когда используется следующим образом:

strcspn( $str , '0123456789' )

Примеры:

echo strcspn( 'That will be $2.95 with a coupon.' , '0123456789' ); // 14
echo strcspn( '12 people said yes'                , '0123456789' ); // 0
echo strcspn( 'You are number one!'               , '0123456789' ); // 19

НТН

0 голосов
/ 08 октября 2017

Я могу делать регулярные выражения, но мне нужно перейти в измененное состояние, чтобы помни, что он делает после того, как я его закодировал.

Вот простая функция PHP, которую вы можете использовать ...

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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...