PHP bir sed dize dönüştürme

3 Cevap php

Ben sed ile kullanıyorum regexpi var, ama şimdi ben de PHP çalışması yapmak gerekir. Onlar engelli olarak ben sistem çağrıları kullanamazsınız.

$ cat uglynumber.txt:
Ticket number : 303905694, FOO:BAR:BAR: Some text
Case ID:123,456,789:Foobar - Some other text
303867970;[FOOBAR] Some text goes here
Case Ref: 303658850 - Some random text here - host.tld #78854w
$ cat uglynumbers.txt | sed "s/[, ]//g;s/.*\([0-9]\{9\}\).*/\1/g"
303905694
123456789
303867970
303658850

Yani, PHP ile aynı nasıl?

Ben böyle bir örnek buldum, ama o içine regexpi enjekte edemez.

if (preg_match("/.../", $line, $matches)) {
  echo "Match was found";
  echo $matches[0];
}

3 Cevap

Belirli SED örneği açıkçası 2 düzenli ifadeler, 1 virgül yerine ediliyor ve bir teknik 9 basamaklı sayıları sürekli kapma ediliyor.

Lütfen SED dizesinin ilk yarısı preg_replace() fonksiyonu ile en uygun olduğunu.

//`sed s/regex/replace_value/flags`

preg_replace('/regex/flags', 'replace_value', $input);

Lütfen SED dize ikinci yarısı olacağını preg_match_all():

//`sed ...;s/regex/\1/flags`

$matches_array = array();
preg_match_all('/regex/flags', $input, &$matches_array);

Yani özel kod gibi bir şey olacaktır:

<?php
$input = file_get_contents('uglynumbers.txt');

$input = preg_replace('/[, ]/m','', $input);

$matches = array();
//No need for the .* or groupings, just match all occurrences of [0-9]{9}
if( preg_match_all('/[0-9]{9}/m', $input, $matches) )
{
    //...
    var_dump($matches);
}

g bir SED değiştirici anlam maçı tüm hatlar gibi görünüyor. preg_match_all() zaten bu modifiye önemser olmalıdır ama m PCRE modifiers üzerine kılavuzuna göre uygun bir değiştirme gibi görünüyor.

preg_replace() aradığınız fonksiyonudur. Sen desen bir dizi geçmek ve parametrelerini değiştirebilirsiniz

$pattern = array('/[, ]/','/.*\([0-9]\{9\}\).*/');
$replace = array('','$1');

foreach($lines as $line) {
   $newlines[] = preg_replace($pattern, $replace, $line);
}

Kullanmayı deneyin preg_replace() instead of preg_match(). grep sed preg_match preg_replace budur etmektir.