2013-04-18 2 views
0

나는 단어를 찾아 그 옆에 숫자를 추가하려고합니다. 그가 어떻게 할 수 있니? 나는 아래의 코드로 시도했지만 나는 할 수 없었다. 누구든지 나를 도울 수 있을까? 감사합니다.PHP와 정규식을 사용하여 변수에서 문자열을 찾는 방법

$string = 'I220ABCD I220ABCDEF I220ABCDEFG' 
if (preg_match("/I220.*/", $string, $matches)) { 
    echo $matches[0]; 
} 

예상 결과 : 대신이 같은 I220ABCD9 I220ABCDEF10 I220ABCDEFG11

+0

폭발하지 않을까요 원하는 방식으로 초기화()이 작은 작업에 충분? – HamZa

+0

숫자를 추가하는 기준은 무엇입니까? 그냥 임의의 숫자를 추가할까요? – Ejaz

+0

숫자가 될 수 있습니다. – user1997072

답변

0

나는 끝에있는 숫자를 추가하기위한 귀하의 requirnments가 무엇인지 알지 못합니다.

$string = 'I220ABCD I220ABCDEF I220ABCDEFG'; 

$arrayStrings = explode(" ", $string); 
$int = 9; 
$newString = ''; 

foreach($arrayStrings as $stringItem) 
{ 
    if (preg_match("/I220.*/", $stringItem, $matches)) 
    { 

     $stringItem = $stringItem.$int; 
     $newString = $newString.$stringItem." "; 
     $int++; 
    } 
} 

echo $newString; 
+0

감사합니다. 제 시스템에 완벽하게 적응할 수있었습니다! – user1997072

+0

매우 환영합니다. 해당 게시물 옆에있는 체크 표시를 선택하여 질문에 답을 표시하는 것을 잊지 마십시오. 이후 사용자가 질문의 이점을 누릴 수 있습니다. – Dan

+0

예가 선택되었습니다! – user1997072

1

사용 preg_replace_callback :

$str = 'I220AB FRRRR CD I221ABCDEF I220AB DSFDSF CDEFG'; 
$repl= preg_replace_callback('~(I220[^\s]+)~', function($m) { 
     static $i=9; 
     return $m[1] . $i++; 
     }, $str); 

echo $repl\n"; // I220AB9 FRRRR CD I221ABCDEF I220AB10 DSFDSF CDEFG 
+0

감사! 하지만 하나씩지나 감니까? – user1997072

+0

도와 주셔서 감사합니다! – user1997072

+0

내 문자열이 그렇다면 코드 I220을 얻으려면 어떻게해야합니까? $ string = '** I220AB FRRRR CD ** I221ABCDEF ** I220AB DSFDSF CDEFG **'; – user1997072

0

당신은 예를 들어, 귀하의 정규식에 catch 블록을 사용해야합니다 "/I220([^ ]+)/" 그리고 모두 사용하려면 preg_match_all을 사용해야합니다.

+0

Thank you! 하지만 하나씩지나 감니까? – user1997072

+0

그냥 루프에 넣을 수 있습니다 :'foreach ($ matches as $ match) {print_r ($ match); }' – calcinai

+0

도움을 주셔서 감사합니다! – user1997072

0

사용 preg_replace_callback() :

$string = 'I220ABCD I220ABCDEF I220ABCDEFG'; 
// This requires PHP5.3+ since it's using an anonymous function 
$result = preg_replace_callback('/I220[^\s]*/', function($match){ 
    return($match[0].rand(0,10000)); // Add a random number between 0-10000 
}, $string); 

echo $result; // I220ABCD3863 I220ABCDEF5640 I220ABCDEFG989 

Online demo. 사용자의 요구와

+0

질문하지 않았다 – user1997072

+0

나는 해결책으로 당신의 질문에 대답하고있다. – HamZa

+0

내 문자열이 그렇다면 코드 I220을 얻으려면 어떻게해야합니까? $ string = '** I220AB FRRRR CD ** I221ABCDEF ** I220AB DSFDSF CDEFG **'; – user1997072

0

preg_replace_callback : 당신이 클래스에 편집 할 수 있습니다 물론

$string = 'I220ABCD I220ABCDEF I220ABCDEFG'; 


    class MyClass{ 

     private static $i = 9; 

     private static function callback($matches){ 
      return $matches[0] . self::$i++; 
     } 

     public static function replaceString($string){ 
      return preg_replace_callback('/I220[^\s]+/',"self::callback",$string); 
     } 
    } 


    echo(MyClass::replaceString($string)); 

당신이

+0

도움 주셔서 감사합니다! – user1997072

+0

글쎄 - 당신은 우아한 대답을 표시했습니다 ^^하지만 괜찮습니다. – Adidi

+0

내 문자열이 그렇다면 코드 I220을 얻으려면 어떻게해야합니까? $ string = '** I220AB FRRRR CD ** I221ABCDEF ** I220AB DSFDSF CDEFG **'; – user1997072

관련 문제