Neden PHP değil, bu düzenli ifade çalışır?

4 Cevap php

Ben (harf duyarsız) "abcd" ve isteğe bağlı bir marka sembolü maç gerekir

Regex: /abcd(™)?/gi

Örneğe bakın:

preg_match("/abcd(™)?/gi","AbCd™  U9+",$matches);
print_r($matches);

Ben bu çalıştırdığınızda, $matches şey ile doldurulur değil ... hatta boş bir dizi olarak oluşturulan değil. Herhangi bir fikir?

4 Cevap

Nasıl dosya kodlanmış? Bu unicode gelince PHP sorunları var. Senin durumunda, yerine doğrudan TM sembolü gömme kaçış dizisi \x99 kullanmayı deneyin.

Note: Ben bir PHP gurusu değilim. Ancak, bu karakter kodlamaları hakkında bir sorun gibi görünüyor. Örneğin, PHP dosyası (™ olarak kodlanmış \x99) kazan-1252 olarak kodlanmış olabilir, ve size eşleştirmeye çalıştığınız veri ™ olarak kodlanmış UTF-8 (olarak kodlanmış olabilir { [(2)]}), ya da tam tersi (yani) dosya UTF-8 ve veri win-1252 olduğunu. Bu yönde bakmayı deneyin ve bize ne yapıyorsun hakkında daha fazla bilgi verebilir.

Ben edebi marka sembolü ile ilgisi var sanıyorum.

Muhtemelen Unicode with your regular expressions kullanın ve ardından trademark symbol için kaçış dizisi gömmek için nasıl kontrol etmek isteyeceksiniz.

Bu nihayet çalıştı regex oldu ... şeylerin bir kombinasyonu oldu:

/abcd(\xe2\x84\xa2)?/i

Ben kaldırmak /g değiştirici ve \xe2\x84\xa2 için tm sembolü değiştirmek zorunda kaldı.