Bir desen karşı bir dize denetleme

2 Cevap php

Ben bir desen karşı yayınlanan içeriği kontrol etmek istiyorum. Ben bu preg_match kurma sorun yaşıyorum (veya dizi?). Desen olmak ...

TEXTHERE:TEXTHERE
TEST:TEST
FILE:FILE

VE

TEXTHERE:TEXTHERE TEST:TEST FILE:FILE

I want to check for either pattern, the one with the whitespace and the one with the line break. yayınlanmıştır içeriği bu ise ... (ekstra satır sonları ve / veya boşluk ile)

TEXTHERE:TEXTHERE

TEST:TEST

FILE:FILE

Ben nasılsa olarak görüntülemek istediğiniz ...

TEXTHERE:TEXTHERE
TEST:TEST
FILE:FILE

ve hala desen karşı maç.

Ben hala ekstra satır sonu ve / veya ekstra beyaz boşluk sıyırma her nasılsa, çalışmak istiyorum ...

$loader = file_get_contents( 'temp/load-'.$list.'.php' );

Bu dize deseni takip etmezse, ben vb çıktı bir hata mesajı, onu istiyorum

if($loader == ???) { // done
} else { // error
}

2 Cevap

Böyle bir şey deneyin:

$loader = 'TEXTHERE:TEXTHERE

TEST:TEST

FILE:FILE';

if(preg_match('/^[A-Z]+:[A-Z]+(\s+[A-Z]+:[A-Z]+)*$/', $loader)) {
    echo preg_replace('/\s{2,}/', "\n", $loader);
}

Çıktı:

TEXTHERE:TEXTHERE 
TEST:TEST
FILE:FILE

Sizin için aynı çıktıyı alırsınız:

$loader = 'TEXTHERE:TEXTHERE        TEST:TEST          FILE:FILE';

Eğer maç ilk kontrol:

[A-Z]+:[A-Z]+    # match a word followed by a colon followed by a word
(                # open group 1
  \s+            #   match one or more white space chars (includes line breaks!)
  [A-Z]+:[A-Z]+  #   match a word followed by a colon followed by a word
)*               # close group 1 and repeat it zero or more times

Bu yukarıdaki maçlar Ve eğer, bir tek satır ara ile 2 veya daha fazla ardışık boşluk karakterleri \s{2,} olarak değiştirin.

Tabii ki, başka bir şey için [A-Z]+ ayarlamanız gerekebilir.

   preg_match('~^\s*(\S+:\S+(\s+|$))+$~', $str)

ya da "AA: BB \ n CC: DD" Bu ": BB CC DD AA" eşleşir ve başarısız "AA: BB foo CC: DD"