Her iki tarafta boşluksuz ve işaretleri bulmak için Regex

6 Cevap php

Ben sadece hemen öncesinde ve sonrasında bir boşluk olmayan herhangi bir ve işaretleri bulmak için regex anlamaya çalışıyorum. Örneğin, "asdf & asdf" bulmak ve "asdf & asdf" değil "asdf asdf &" olur

Bu daha önce ve sonra boşluk eklemek için bir preg_replace kullanılacaktır. (Eğer merak ediyorsanız, sorun ben işaretlerinden iki tarafta boşluk soyarak bir hata var bir WYSIWYG ile sıkışmış kulüpler olduğunu, ve ben elle aslında sonra bunları geri eklemeniz gerekir). Düşünceler?

6 Cevap

Ampersand değil bir boşluk önce bir boşluk ya da ampersanı sonra değil genişliği, ancak her ikisi de:

(?<!\s)&|&(?!\s)

Etrafa kullanarak, böylece bu yalnızca işareti yakalar.

Ben ilk sol ve sağ karakterleri bağımsız tüm ve işaretleri bulmak ve sonra değil, her iki karakter boşluk olduğundan emin olmak için iddianın arkasında olumsuz bir görünüm kullanmanızı öneririm.

.&.(?<! & )

Non-boşluk ampersanı önce veya sonra:

(&[^ ]|[^ ]&)

Bu iki tarafında yoksa boşluk koymak için, bu gibi yapılabilir

echo preg_replace('/ ?& ?/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf & asdf asdf & asdf

(Başlık soru cevaplama) her iki tarafta boşluksuz için, asdf& asdf üzerinde başarısız olur

echo preg_replace('/(?<! )&(?! )/',' & ','asdf&asdf asdf& asdf asdf & asdf');
//asdf & asdf asdf& asdf asdf & asdf

O (test değil) çalışması gerekir: /([^\s]&|&[^\s])/. /([^ ]&|&[^ ])/: Eğer boşluk değil, "herhangi bir boş karakter" konusunda endişeleriniz varsa

([^\s]+&.+)|(.+&[^\s]+)

Bu regex boşluk sol xor üzerinde olduğundan emin kılan bir & karakter sağ