PHP regex değil yeni hat

5 Cevap php

Nasıl yeni hatlar dışında herhangi bir karakter kabul eden bir regex ifadesi var. Bu şey içerir ama aynı zamanda istediğimi değil, yeni hatları içerir:

"/(.*)/"

5 Cevap

Eğer s değiştirici kullanmak sürece nokta . satırsonlarını eşleşmiyor.

>>> preg_match("/./", "\n")
0
>>> preg_match("/./s", "\n")
1

Aşağıdaki normal ifade satırsonlarının dışında herhangi bir karakterle eşleşmesi gerekir

/[^\n]+/

Varsayılan davranış, yeni bir satır aynı olmamalıdır. "S" değiştirici nokta maç yeni hatlar da dahil olmak üzere tüm karakterleri, yapmak için kullanılır çünkü. Belki bakmak için bir örnek verebilir misiniz?

#!/usr/bin/env php
<?php

$test = "Some\ntest\nstring";

// Echos just "Some"
preg_match('/(.*)/', $test, $m);
echo "First test: ".$m[0]."\n";

// Echos the whole string.
preg_match('/(.*)/s', $test, $m);
echo "Second test: ".$m[0]."\n";

Yani senin programı ile sorunun ne olduğunu bilmiyorum, ama gerçek uygulamada /s değiştirici yoksa o (regex değil.

varsayılan olarak nokta (.) satırsonlarını kabul etmez, çünkü bu, garip. Büyük ihtimalle bir "\ r" (satırbaşı) Orada karakter var, böylece hem ortadan kaldırmak gerekir: /[^\r\n]/

ah, sen / s kullanılarak edildi