Düzenli İfade Bir Script İşleri ve başka yok mu

3 Cevap php

PHP ilginç bir hata rastladım ettik. Temelde ben bir betik (script A) çalışıyor ama bir sınıf içine koymak ve bir betik (Script B) kullanıldığında çalışmak için başarısız aşağıda görülen düzenli bir ifade var.

PHP 5.3 Bu komut, test edilmiş ve 5.2 var.

Script A:
http://iamdb.googlecode.com/svn/trunk/testing.php

Script B:
Class the regex is used in: http://iamdb.googlecode.com/svn/trunk/imdb/search/imdb_search_title.class.php
Script calling it: http://iamdb.googlecode.com/svn/trunk/examples/Search_Debug.php

Regular Expression:

"#<br> aka <em>\"([^\"]*)\"</em>(?: -?,? ([^ ]*) (?:<em>\(([^\)]*)\)</em>)*)*#i"

Teşekkürler.

Talep olarak, burada Senaryo B. bazı örnek çıktı ..

Array
(
    [0] => Array
        (
        )

    [1] => Array
        (
        )

    [2] => Array
        (
        )

    [3] => Array
        (
        )

    [INPUT] => <small>(TV series)</small>    <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>
)

Numaralı tuşlar preg_match_all çağrısından ve INPUT tuşuna giriş dizesi göstermek için sonradan ilave edilir.

3 Cevap

Hata ayıklayıcı bakarak, subject preg_replace_all s sınıf ve test.php durum arasında eşleşmiyor.

Test davadan:

<small>(TV series)</small>    <br> aka <em>"Sledge Hammer: The Early Years"</em> - USA <em>(second season title)</em>

Gerçek subject zaman sınıfından adı:

<small>(TV series)</small>    <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>

<br> ve aka arasında boşluk yoktur. Regex dışında bu alanı alın ve çalışıyor.

Regex veya bir sınıfta katıştırma ile yanlış bir şey yok. Sen onlar değil, test durumları eşdeğer olduğunu kendiniz ikna ediyoruz. Acil durumda, dize sınıf sürüm gönderiyoruz,

<small>(TV series)</small>    <br>aka <em>"Hammer Time"</em> - USA <em>(working title)</em>

regex <br> ve aka arasında tam bir boşluk gerektirdiğinden regex ile uyumlu değildir. Bunun Bu revizyon işleri:

const REGEX_AKA = "#<br>\s*aka <em>\"([^\"]*)\"</em>(?: (?:-?)(?:,?) ([^ ]*) (?:<em>\(([^\)]*)\)</em>)*)*#i";

Eğer gibi, IMDB gerçek bir arama sonucu sayfasında karşı maç için çalışıyoruz this one? O sayfada "<br>" ve "aka" her zaman olmayan bir kırma alan için bir varlık referans ayrılır:

<br>&#160;aka <em>

Bu her zaman böyle olmadığını ben bilmiyorum; Böyle birden fazla türlü ve whitepsace temsilleri için izin isteyebilirsiniz:

<br>(?:&(?:#(?:160|xA0)|nbsp);|\xA0|\s)*+aka

yani, sıfır veya daha fazla: Bir nbsp (ondalık, onaltılık veya adlandırılmış) için bir varlık referansı; Bir real nbsp; veya standart bir boşluk karakteri.