Birden fazla satır maçları php preg_replace regex

2 Cevap php

Ben bu önemsiz olduğundan emin değilim, ama konu birden çok satırdan oluşur dikkate alır bir regex oluşturamıyor değilim. Biri için "m" değiştirici çalışmak için görünmüyor.

2 Cevap

Maxwell Troy Milton Kral doğru, ama onun cevabı biraz kısa olduğundan, ben de bu yazı ve göstermek için bazı örnekler vereceğiz.

İlk olarak, varsayılan . meta karakter satır sonları eşleşMEyecektir. Bu PHP'nin lezzet dahil olmak üzere birçok regex uygulamaları için de geçerlidir. O dedi, metin alabilir:

$text = "Line 1\nLine 2\nLine 3";

ve regex

'/.*/'

sonra regex sadece maç Line 1. olacak Kendiniz için bakınız:

preg_match('/.*/', $text, $match);
echo $match[0]; // echos: 'Line 1'

.* \n (yeni hat karakter) de "eşleştirme durur" yana. Eğer o da satır sonları maç izin istiyorsanız, sizin regex sonunda s-değiştirici (aka DOT-ALL değiştirici) append:

preg_match('/.*/s', $text, $match);
echo $match[0]; // echos: 'Line 1\nLine 2\nLine 3'

Şimdi m-değiştirici (multi-line) hakkında: Giriş dizesi başlangıç, ama aynı zamanda her satırın başlangıcı değil, sadece ^ maç izin verir. O $ giriş dizesi sonu, ama aynı zamanda her satırın sonuna sadece maç sağlayacak: $ ile aynı.

Örnek:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/', $text, $matches);
print_r($matches); 

(giriş sonunda), sadece 3 eşleşir edilmektedir. Ancak:

ancak m-değiştirici etkinleştirme:

$text = "Line 1\nLine 2\nLine 3";
preg_match_all('/[0-9]$/m', $text, $matches);
print_r($matches);

Her satırda ('1 ', '2' ve '3 ') sonunda tüm (tek) hane eşleştirilir.

Eğer 's' değiştirici denedin mi? Tek satır gibi davranın 'Anlamı. 'M' ^ ve kullanımını $ çizgi başlangıcı ve kullanılması için sonlar sağlar.