Php regex eşleşmeleri ayıklanıyor

4 Cevap php

Perl regex biz eski aşağıda eşleşen değişkenleri, elde edebilirsiniz.

   # extract hours, minutes, seconds
   $time =~ /(\d\d):(\d\d):(\d\d)/; # match hh:mm:ss format
   $hours = $1;
   $minutes = $2;
   $seconds = $3;

Php bunu nasıl?

$subject = "E:contact@customer.com I:100955";
$pattern = "/^E:/";
if (preg_match($pattern, $subject)) {
    echo "Yes, A Match";
}

Oradan e-posta ayıklamak nasıl? (Biz onu patlayabilir ve onu olsun ... ama regex aracılığıyla doğrudan almak için bir yöntem istiyorsanız olabilir)?

4 Cevap

Preg_match adlandırılmış alt şablon sözdizimini kullanmayı deneyin:

<?php

$str = 'foobar: 2008';

// Works in PHP 5.2.2 and later.
preg_match('/(?<name>\w+): (?<digit>\d+)/', $str, $matches);

// Before PHP 5.2.2, use this:
// preg_match('/(?P<name>\w+): (?P<digit>\d+)/', $str, $matches);

print_r($matches);

?>

Çıktı:

 Array (
     [0] => foobar: 2008
     [name] => foobar
     [1] => foobar
     [digit] => 2008
     [2] => 2008 )

Php kontrol manual

int preg_match (string $ şablon, string $ konu [, array & $ maçı [, int $ seçenekler [, int $ başlangıç]]])

If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

$subject = "E:contact@customer.com I:100955";
$pattern = "/^E:(?<contact>\w+) I:(?<id>\d+)$/";
if (preg_match($pattern, $subject,$matches)) {
    print_r($matches);
}

Aşağıdaki gibi preg_match fonksiyonunun matchs parametreyi kullanın:

matches:
If matches is provided, then it is filled with the results of search. $matches[0] will contain the text that matched the full pattern, $matches[1] will have the text that matched the first captured parenthesized subpattern, and so on.

Sadece ilk uzaya kolon up sonra her şeyi yakalamak için geçerli regexpi değiştirebilirsiniz:

$subject = "E:contact@customer.com I:100955";
$pattern = "/^E:([^ ]+)/";
if (preg_match($pattern, $subject, $m)) {
    echo "Yes, A Match";
}
$email = $m[1];

Eğer regexp aşina değiliz, [^ ]+ araçları "any character but a space" ve işe mevcut olduğu bir yer gerektirmez. Herhangi bir nedenle giriş " I:12345" bit olmadan "E:email@host.tld" değiştirir, hala çalışacaktır.