Regex, iki karakter arasındaki dize değerini almak

3 Cevap php

Ben iki karakter, @ ve nokta arasındaki dize dönmek istiyorum (.).

Ben regex kullanmaya çalıştı ama o çalışma bulamıyorum.

(@(.*?).)

Kimse yok mu?

3 Cevap

Düzenli ifade neredeyse sadece dönem kaçmak unuttum çalışır. Ayrıca, PHP size sınırlayıcı gerekir:

'/@(.*?)\./s'

S DOTALL modifier olduğunu.

Burada PHP nasıl kullanılacağını tam bir örnek:

$s = 'foo@bar.baz';
$matches = array();
$t = preg_match('/@(.*?)\./s', $s, $matches);
print_r($matches[1]);

Çıktı:

bar

Bu normal ifade deneyin:

@([^.]*)\.

Ifadesi [^.]* nokta dışındaki herhangi bir karakteri herhangi bir sayı maç olacak. Ve düz nokta özel bir karakter olarak öncelenmesi gerekir.

Eğer regex öğrenme ediyorsanız, siz de bu analiz etmek isteyebilirsiniz:

@\K[^.]++(?=\.)

(?<=@)[^.]++(?=\.)

Her ikisi de bu düzenli ifadeler iyelik nicelik kullanabilirsiniz (++). Zaman yapabilirsiniz gereksiz geriye gidilmiştir önlemek için, bunları kullanın. Ayrıca, etrafa yapılar ile (ya da \K), biz @ ve . $matches[0] in arasındaki kısmını eşleşebilir.