2016-04-05 20 views
0

PHP kullanıyorum ve grep kullanarak 'gi|HERE IS THE NUMBER|' karakterleri arasındaki sayıları ayıklamak ve değişkene atamak istiyorum.karakter arasında ayıklama sayı - grep

dosya içerir: gi|1786181| ve gi|1786192| ve x ve y değişkenlerine koyun:

>gi|1786181|gb|AE000111|ECAE000111 Escherichia coli , thrL, thrA, thrB, thrC, yaaA, yaaJ, talB, mog, yaaH genes from bases 1 to 10596 
>gi|1786192|gb|AE000112|ECAE000112 Escherichia coli , htgA, yaaI, dnaK, dnaJ, yi81_1, yi82_1 

Burada sayı ayıklamak istiyorum.

Yani, çıkış olacaktır: x=1786181, y=1786192

Denemek:

$x = shell_exec("C:\\cygwin64\\bin\\bash.exe --login -c \" grep -o 'gi\|[0-9]\|' $file.txt > $result.txt 2>&1\"");  

O çalışmadı. Herhangi bir yardım lütfen?

+1

:, size bir veya daha fazla tamsayılar gerektirdiğini belirtmek gerekir karınca grep? Neden php'de değil? – anubhava

+1

As @anubhava dedi, php; bakınız ['preg_match'] (http://php.net/preg_match). – bufh

cevap

1

Neden kabuktan grep'u kullanıyorsunuz? preg_match() kullanın: Her iki durumda da

array(
    0 => array(
     "gi|1786181|", 
     "gi|1786192|" 
    ), 
    1 => array(
     "1786181", 
     "1786192" 
    ) 
) 

:

$input = file_get_contents('file.txt'); 
preg_match("/gi\|([0-9]+)\|/", $input, $matches); 

$matches Aşağıdaki gibi bir şey dönecekti, dizideki ilk öğe peşinde olduğunuz tam eşleşme, ikinci sadece değerleri içerir Neden w öyle mi

gi\|([0-9]+)\| 
+1

@Alaa Belgeleri okuyun ve öğrenin! –

+0

@Egg Yazmak doğru mu ?: preg_match ("/ \ | ([0-9] +) \"/", $ buffer, $ match); $ s = $ eşleşmeler [1]; echo $ s; ? – Alaa

+0

@Egg Tam olarak ne istiyorum. Çok teşekkürler. – Alaa

0
$str = 'gi|1786181|gb|AE000111|ECAE000111 Escherichia coli , thrL, thrA, thrB, thrC, yaaA, yaaJ, talB, mog, yaaH genes from bases 1 to 10596'; 
preg_match("/\|([0-9]+)\|/", $str, $matches); 
print_r($matches);