从PHP字符串中查找并激活数字

时间:2016-07-27 10:13:37

标签: php

我有textarea,字符串:

    __A 59.202x5p.
    __B 611.08 500p
    __C 991,70p.66.113.552.77.88.10p 199x200p
    __C2 33 44x100p 55 161x150p 25 33 85x60p 727 77 373 22x220p  
    __C3 44 16 59x10p 343 x15p 172 200p

我想要这样的输出:

    __A 59.20 02x5p.
    __B 61 11.08 500p
    __C 99 91,70p.66.11 13.55 52.77.88.10p 19 99x200p
    __C2 33 22 44x100p 55 16 61 x150p 25 33 85x60p 72 27 77 37 73 22x220p  
    __C3 44 16 59x10p 34 43 x15p 17 72 200p

如果数字是数百,而在“x?p”或“?p”之前(?是随机数和不可能),那么它会激发并且线路会像这样:

    __A 59.202x5p. >>>  __A 59.20 02x5p. 
    __B 611.08 500p >>>  __B 61 11.08 500p 
    __C 991,70p.66.113.552.77.88.10p 199x200p >>>  __C 99 91,70p.66.11 13.55 52.77.88.10p 19 99x200p
    ...

我使用的是preg_match + preg_replace + substr但是我无法找到“x?p”或“?p”之前的数百位数(?是随机数和不可能)...

我不明白如何激励数字:

    __A 59."202"x5p. ( 202 to 20 02 ) >>>   __A 59.20 02x5p.
    __B 611.08 500p  ( 611 to 61 11 ) >>>  __B 61 11.08 500p

我的英语不好,希望读我的问题能理解并帮助我解决。

非常感谢。

1 个答案:

答案 0 :(得分:0)

检查以下代码..

<?php
echo "<u>CURRENT STRING</u><br/>";
echo $value ="__A 59.202x5p.
         __B 611.08 500p
         __C 991,70p.66.113.552.77.88.10p 199x200p
         __C2 33 44x100p 55 161x150p 25 33 85x60p 727 77 373 22x220p  
         __C3 44 16 59x10p 343 x15p 172 200p";echo '<br>';

for($i=0;$i<=(strlen($value)-4); $i++ ) { 
    $myvar = $value[$i].$value[$i+1].$value[$i+2];      
    if (preg_match("/\d{3}/u", $myvar) > 0 && $myvar>100 && strpos($myvar.$value[$i+3], 'p') == 0)
    $value = substr($value,0,$i+2).' '.$value[$i+1].substr($value,$i+2,strlen($value));      
}
echo "<u>DESIRED STRING</u><br/>";
echo $value;
?>