2011-09-21 13 views
6

में किसी भी संख्या के पहले होने की स्थिति पाएं स्ट्रिंग में किसी भी संख्या के पहले होने की स्थिति को ढूंढने के लिए कोई मुझे एल्गोरिदम के साथ मदद कर सकता है?स्ट्रिंग (php)

कोड मैं इसे वेब पर पाया जाता है और काम नहीं करता:

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

कोशिश preg_match ('/ [\ घ] /', $ पाठ, $ एम) है; – user269867

+0

इसके अलावा, मुझे regex अभिव्यक्तियों का परीक्षण और डीबग करने के लिए ऑनलाइन "पायथन रेगेक्स प्रतिलिपि" का उपयोग करने में आसान लगता है। उदाहरण के लिए: https://pythex.org – SherylHohman

उत्तर

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

इस के लिए काम करना चाहिए। मूल कोड को पहले नंबर से पहले आने के लिए - की आवश्यकता थी, शायद यह समस्या थी?

+0

यदि स्ट्रिंग में कोई संख्या नहीं है तो यह मूल स्ट्रिंग की लंबाई देता है? – Gasper

+0

@ gašper: ठीक है। तय किया जा सकता है, लेकिन स्टेनस्लाव का समाधान बहुत बेहतर है। –

+0

उसका समाधान बेहतर क्यों है? यदि स्ट्रिंग में कोई संख्या नहीं है तो यह मुझे 1 (उसके एल्गोरिदम के साथ) देता है। अगर मैं तुम्हारा उपयोग करता हूं तो यह मुझे कुछ तार्किक (स्ट्रिंग लम्बाई) देता है। – 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

अधिक समझ में आता है। I (और RegexBuddy) को 'PREG_OFFSET_CAPTURE' के बारे में पता नहीं था :) –

0

मैं नियमित अभिव्यक्ति कर सकते हैं, लेकिन मैं के लिए एक बदल राज्य में जाने के लिए याद यह क्या करने के बाद उस कोड जोड़ने के बाद करता है।

यहाँ एक सरल 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 
} 
संबंधित मुद्दे