preg_replace mektuplarla preceeded numaralarını bulmak için düzenli ifade

3 Cevap php

Gerçekten preg_replace kullanıyorum ama yavaş yavaş öğrenmeye olarak kafam karıştı.

Ben fonksiyonu ile yardıma ihtiyacım var:

$str= preg_replace('#\W\d+#', '\W \d+', $str);

Fikir, Im boşluk ile doğrudan önlerinde mektuplar var numaralarını arayan olduğunu

yani abc123. (NOT 'abc 123' ve '123abc DEĞİL ')

ve nasıl ben sadece o kadar abc123 abc 123 veya abc @ @ 123 olur arasında bir boşluk veya karakter dahil edebilirim

teşekkürler herkese!

3 Cevap

<?php

$str = 'abc()1234';
$str= preg_replace('#([a-zA-Z()])(\d+)#', '$1 $2', $str);

echo $str;

Çıktı:

abc () 1234

$ 1 ve 2 $ geribaşvurularla ve sırasıyla birinci ve ikinci yakalanan grupları anlamına gelir. Daha detaylı bilgi @ http://www.regular-expressions.info/brackets.html.

İstediğiniz

$str= preg_replace('#([A-Za-z]+)(\d+)#', '$1 $2', $str);

\W bunu yapar düşünüyorum ne yapmaz; \w "kelimesi karakter" ve \W demektir "not kelimesi karakter" anlamına gelir. Özellikle istediğiniz beri letters, ama, ne istediğini yapar, ve tüm harflere uyan karakter sınıfı olan, [A-Za-z] gerekir. Ayrıca, "bir veya daha fazla" maç için ondan sonra bir + gerekir.

Parantez sonra başvurmak üzere ifade nasıl "yakalama" parçası olan; $1 ve $2 sizin parantez-yakalanan metne bakın.

Sen online PHP Regegular expressor tester in /([A-Za-z])(\d+)/ ve /([A-Za-z]+)(\d+)/ arasındaki farkı görebilirsiniz. Her iki durumda da preg_replace ile çalışır. Ama ikincisi de preg_match_all ile çalışır, bu yüzden daha sağlamdır.